[Java] 자바가상머신(JVM, Java Virtual Machine)

wujin·2023년 4월 18일

JVM(Java Virtual Machine)

JVM은 Java 프로그래밍 언어에서 사용되는 가상 머신으로, Java 애플리케이션을 실행하기 위한 실행 환경을 제공한다. 이것은 Java 언어로 작성된 코드를 실행하고, Java 코드가 다른 운영 체제와 하드웨어에서 동일하게 작동할 수 있도록 도와준다.

JVM 작동 순서
1. 클래스 로더(Class Loader)를 사용하여 필요한 클래스를 로드한다.
2. 바이트 코드 검증(Bytecode Verification)을 수행하여 바이트 코드의 유효성을 검사한다.
3. 실행 엔진(Execution Engine)은 바이트 코드를 기계어로 번역하고 실행한.
4. 가비지 컬렉터(Garbage Collector)는 더 이상 사용되지 않는 객체를 검색하고 메모리를 해제한다.

JVM은 Java 언어로 작성된 .class 파일을 읽고 해석한다. 이 파일은 Java 컴파일러에 의해 생성되며, Java 소스 코드에서 생성된다. JVM은 .class 파일의 바이트 코드를 읽고 이를 해당 운영 체제의 기계어로 변환하여 실행한다.

JVM은 다른 운영 체제 및 하드웨어와 상호 작용하는 Java 코드의 일관된 실행 환경을 제공하기 때문에 Java 코드가 운영 체제나 하드웨어에 종속되지 않고 언제 어디서나 실행될 수 있도록 보장한다.

또한 중요한 역할 중 하나는 메모리 관리이다. JVM은 Java 프로그램의 메모리 관리를 담당한다. Java 프로그램에서는 객체를 생성하고 사용한 후, 더 이상 필요하지 않으면 메모리에서 삭제해야한다. 이렇게 삭제되지 않은 객체는 메모리 누수(leak)를 발생시킬 수 있다.

이를 해결하기 위해 JVM은 가비지 컬렉터(Garbage Collector) 라는 메모리 관리 기능을 제공한다. 가비지 컬렉터는 Java 프로그램에서 사용한 메모리 중에서 더 이상 사용되지 않는 객체를 찾아서 삭제한다. 이를 통해 메모리 누수를 예방하고, Java 개발자가 수동으로 메모리 관리를 하지 않아도 된다는 장점을 가지고 있다.

가비지 컬렉터는 JVM이 동작하는 동안 주기적으로 실행된다. 가비지 컬렉터는 더 이상 사용되지 않는 객체가 얼마나 많은지를 확인하고, 이를 메모리에서 삭제한다. 이 과정에서 가비지 컬렉터는 객체의 레퍼런스 카운트(reference count)를 검사하고, 이 카운트가 0인 객체를 삭제한다.

가비지 컬렉터는 JVM의 중요한 부분 중 하나이며, Java 프로그램이 안정적으로 실행될 수 있도록 보장한다. 또한 가비지 컬렉터는 Java 개발자가 메모리 관리를 수동으로 하지 않아도 되기 때문에, Java 개발자의 생산성을 향상시켜준다.


Runtime Data Area

JVM의 Runtime Data Area는 Java 애플리케이션이 실행될 때 사용되는 메모리 영역이다. Java 프로그램이 실행될 때마다 JVM은 이러한 Runtime Data Area를 생성하며, 이 영역은 다양한 구성 요소로 구성된다.

Method Area
모든 Thread가 공유하는 영역으로 JVM이 시작될 때 생성되며 클래스, 인터페이스, 메소드, 상수, static 변수 등의 바이트 코드들이 저장된다.

Heap Area
모든 Thread가 공유하며, 객체를 저장하는 영역으로 new 키워드로 생성된 객체, 배열 등이 저장된다. Heap Area는 크기가 동적으로 변한다.

Stack Area
메소드 호출 시마다 각각의 스택 프레임이 생성되며, 메소드 안에서 사용되는 지역 변수, 매개변수, 리턴 값 및 연산 시 일어나는 값을들 임시로 저장하나다. 메소드 수행이 끝나면 프레임별로 삭제된다. Stack Area는 크기가 정적으로 결정된다.

PC Register
모든 각각의 Thread가 시작될 때 생성된다. 각의 Thread마다 현재 수행 중인 명령어의 주소를 저장하는 공간이다.

Native Method Stack
Native 메소드가 호출될 때 사용되는 영역이다. 이러한 Runtime Data Area는 JVM이 자동으로 메모리를 할당하고 해제하기 때문에 개발자가 직접 메모리를 관리할 필요가 없다. 또한, Garbage Collector가 Heap Area에서 더 이상 사용되지 않는 객체를 자동으로 제거하여 메모리 누수를 방지한다.

0개의 댓글