본문 바로가기
Daily Dev Q&A 정리 템플릿

25.11.24 JVM이란?

by teg0 2025. 11. 24.

JVM(Java Virtual machine)

정의

자바를 실행하기 위한 가상 머신으로, 자바 코드를 바이트코드로 컴파일하면 이 바이트코드를 운영체제와 상관없이 실행해 주는 역할한다.

 

JVM의 구조

개발자가 작성한 자바 소스 코드(.java)를 javac 컴파일러가 컴파일하여, .class(바이트 코드)로 변환한다.

클래스 로더가 바이트 코드를 읽어들여 메모리에 로드한다.

바이트 코드를 기계어로 변환하고 실행하는데, JIT 컴파일러(필요한 부분만 컴파일)가 사용되어, 성능을 최적화한다.

프로그램이 사용하지 않는 메모리를 자동으로 수거하여 메모리 방지 후 프로그램을 종료한다.

런타임 데이터 영역은 메서드 영역, 힙 영역, 스택 영역, PC 레지스터, 네이티브 메서드 스택으로 구성되며,

각 영역은 메서드, 힙과 같은 공유 영역과 스택, PC 레지스터와 같은 스레드 별 영역으로 나뉜다.

 

메서드 영역은 모든 스레드가 공유하는 영역이며, 클래스와 인터페이의 정보(메타 데이터), 상수, 풀, static 등이 저장된다.

힙 영역은 모든 스레드를 공유하는 영역이며, new라는 키워드를 통해 생성된 객체와 배열을 저장하는 곳이다.

프로그램을 종료할 때 GC 대상이된다.

 

스택 영역은 JVM이 시작될때 생성되는 스레드마다 생성되는 영역으로, 메서드 호출시 해당 메서드의 지역 변수, 매개 변수, return 값 등을 저장한다.

PC 레지스터는 각 스레드마다 공유되는 영역이며, 현재 실행할 명령어의 주소를 저장한다.

네이티브 메서드 스택은 각 스레드마다 생성되는 영역이며, JVM이 네이티브 메서드(C, C++ 등)를 호출할 때 사용한다.

 

 

장점

  • 플랫폼 독립성이 가장 큰 장점이다.
    운영체제나 하드웨어에 종속되지 않고 JVM이 설치되면 어디서든 실행 가능하다.
  • 자동 메모리 관리(가비지 컬렉션)로 메모리 누수를 방지한다.
    개발자가 직접 메모리 할당, 해제할 필요 없다.
  • 격리된 실행 환경(샌드박스)를 제공하여, 시스템을 보호한다.
  • 초기 자바는 인터프리터였지만, JIT 컴파일러를 도입해 Native machine code로 컴파일하여 성능이 향상된다.
  • 다양한 라이브러리와 개발 도구를 제공한다.

 

단점

  • C, C++에 비해 성능 오버헤드가 발생할 수 있어 프로그램 시작 시 클래스를 로드하는 과정에서 시간이 소요된다.
  • 높은 메모리 사용량을 요구한다.
  • 대규모 엔터프라이즈 환경에서는 최적의 성능을 위해 GC 설정을 정밀하게 튜닝해야 하므로, 가비지 컬렉션 튜닝의 복잡성이 존재한다.

 

유사 개념

JVM과 유사한 개념은 JRE, JDK가 있다.

JRE는 자바 프로그램을 실행하기 위한 환경을 제공하며, JVM에 API(라이브러리)를 포함하고 있다.

JDK는 자바 프로그램을 개발하고 실행하기 위한 도구이며, JRE(JVM + 라이브러리)를 포함하고 있다.

 

면접 답변식 요약

JVM자바를 실행하기 위한 가상 머신으로, 운영체제와 하드웨어 상관없이 실행해 주는 역할을 한다.

개발자가 작성한 자바 소스 코드인 .java 파일을 javac 컴파일러가 컴파일하면, .class 바이트 코드로 변환된다.

클래스 로더를 통해 메모리에 적재하고 바이트 코드 검증기로 안선성을 검사한다.

JIT 컴파일러와 인터프리터가 검증된 바이트 코드를 기계어로 변환하며, 최적화 시키고 프로그램이 실행된다.

프로그램이 종료되기 전 GC를 통해 자동으로 메모리 관리한 후 프로그램을 종료한다.