JVM(Java Virtual Machine)

유재훈·2023년 7월 14일
0

JAVA_Study

목록 보기
3/3

JVM(Java Virtual Machine)

자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어. 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행. JVM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있음. 현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행환경 (JRE)가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 뜻.

JVM의 장점

JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있다.

.class 파일은 Java 소스 코드를 컴파일하여 생성된 파일로, 컴퓨터가 이해할 수 있는 Java 가상 머신 (JVM)의 바이트 코드로 변환해줌.
즉, 사람이 쓰는 자바 코드에서 컴퓨터가 읽는 기계어로의 중간 단계

자바 프로그램 실행 과정과 JVM


우리가 자바로 .java 코드를 작성하고 파워쉘이나 터미널에 있는 자바 컴파일러인 javac에 컴파일 명령을 내리면 .class 파일이 만들어짐. 이후 이 바이트 코드는 클래스 로더를 통해 JVM Runtime Data Area로 로딩되고 로딩된 .class 바이트 코드를 실행할 컴퓨터에 깔린 JVM에 가져다주면 그 컴퓨터가 이 프로그램을 실행할 때 이 JVM이 그때그때 기계어로 해석.

JVM(자바 가상 머신) 동작 방식


1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당
2. 자바 컴파일러(.javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일
3. Class Loader를 통해 JVM Runtime Data Area로 로딩
4. Runtime Data Area에 로딩된 .class들은 Execution Engine을 통해 해석
5. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 가비지 컬렉터(Garbage Collector)의 작동과 스레드 동기화가 이뤄짐.

JVM의 구조

클래스 로더(Class Loader)


자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결됨. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 클래스 로더(Class Loader).
자바에서 소스를 작성하면 .java파일이 생성되고 .java소스를 컴파일러가 컴파일하면 .class파일이 생성되는데 클래스 로더(Class Loader)는 .class파일을 묶어서 JVM이 운영체제로 부터 할당받은 메모리 영역인 Runtime Data Area로 적재함.

실행 엔진(Execution Engine)

클래스 로더에 의해 JVM으로 로드된 .class 파일(바이트 코드)들은 Runtime Data Area의 Method Area에 배치되는데, 배치된 이후에 JVM은 Method Area의 바이트 코드를 실행 엔진(Execution Engine)에 제공하여, 정의된 내용대로 바이트 코드를 실행시킴. 이때, 로드된 바이트 코드를 실행하는 런타임 모듈이 실행 엔진(Execution Engine)임. 실행 엔진은 바이트 코드를 명령어 단위로 읽어서 실행.

가비지 컬렉터(Garbage Collector)


자바 가상 머신은 가비지 컬렉터(Garbage Collector)를 이용하여 더이상 사용하지 않는 메모리를 자동으로 회수해줌. 따라서 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와줌. Heap메모리 영역에서 생성(적재)된 객체들 중에 참조되지 않은 객체들을 탐색 후 제거하는 역할을 하며 해당 역할을 하는 시간은 정확히 언제인지는 알 수 없음. 가바지 컬렉터(Garbage Collector)역할을 수행하는 스레드를 제외한 나머지 모든 스레드들은 일시정지상태가 됨.

0개의 댓글