Java와 JVM

Hyeok·2025년 4월 23일

Java 장단점에 대해서 분석해보고, JDK 구성 요소와 JVM이 정확히 무얼 하는지에 대해 정리

장점

  • 플랫폼 독립성
    Java는 JVM(Java Virtual Machine)을 통해 운영 체제나 하드웨어에 상관없이 실행 가능. -> 이게 가장 큰 장점 같다.
    예: Windows에서 작성한 코드가 Linux, macOS에서 추가 수정 없이 실행.

  • 강력한 생태계와 라이브러리
    방대한 표준 라이브러리와 서드파티 라이브러리(예: Spring, Hibernate, Apache Commons)를 제공.

  • 객체 지향 프로그래밍

  • 대규모 커뮤니티와 지원, 지속적인 업데이트

단점

  • 성능 문제
    JVM에서 실행되므로 네이티브 언어(C, C++)에 비해 실행 속도가 느릴 수 있음. 특히 리소스 집약적인 애플리케이션에서 단점으로 작용.
  • 메모리 사용량
    가비지 컬렉션과 JVM의 오버헤드로 메모리 사용량이 비교적 큼.
    경량 애플리케이션에는 적합하지 않을 수 있음.

주요 개념

  • .java 파일 (소스 코드)
    Java 소스 코드는 개발자가 작성하는 텍스트 파일로 .java 확장자를 가짐. 사람이 읽을 수 있는 고수준 코드
  • 바이트코드 (Bytecode)
    .java 파일을 javac 컴파일러로 컴파일하면 바이트코드(.class 파일)로 변환됨. 바이트코드는 JVM(Java Virtual Machine)이 이해할 수 있는 중간 표현으로, 플랫폼 독립적(특정 하드웨어/OS에 종속되지 않음). 바이트코드는 기계어가 아니므로 직접 실행 불가. JVM이 이를 해석하거나 JIT 컴파일러로 기계어로 변환해야 함.
  • .class 파일
    .class 파일은 바이트코드를 저장하는 파일.
    하나의 .java 파일은 컴파일 후 여러 .class 파일을 생성할 수 있음(예: 내부 클래스 포함 시).
    역할: JVM이 실행할 수 있는 중간 코드 저장.
  • 바이너리 코드 (기계어, Machine Code)
    바이너리 코드는 CPU가 직접 실행할 수 있는 저수준 명령어(0과 1로 구성). Java에서는 바이트코드가 JIT 컴파일러 또는 인터프리터를 통해 런타임에 바이너리 코드로 변환됨. 다른 언어에서는 컴파일러가 소스 코드를 직접 바이너리 코드로 변환(예: C의 .exe).

Java의 컴파일 및 실행 과정

  1. 소스 코드 작성: 개발자가 .java 파일에 Java 코드를 작성.
  2. 컴파일: javac가 .java 파일을 바이트코드(.class 파일)로 변환.
  3. 실행: JVM이 .class 파일의 바이트코드를 로드하여 인터프리터 또는 JIT 컴파일러로 실행.
    • 인터프리터: 바이트코드를 한 줄씩 해석하여 실행(느림).
    • JIT 컴파일러: 자주 실행되는 바이트코드를 바이너리 코드(기계어)로 변환하여 캐싱, 이후 빠르게 실행.
  4. 결과: 바이너리 코드가 CPU에서 실행되어 프로그램 동작.
profile
공부하면서 정리한 블로그입니다. 혹시 잘못된 내용이 있다면 댓글로 알려주시면 큰 도움이 됩니다. 감사합니다!

0개의 댓글