대체 JVM이 무엇이기에 Java를 공부하는 나를 이토록 괴롭히는거니?

JooKit 주킷 2024. 3. 12. 00:51
목차 접기
728x90
반응형

 

 

 

JVM: Java Virtual Machine 

자바 가상 머신  

 

 

자바 프로그램을 실행하는 데 사용되는 가상 컴퓨터를 의미한다.

 

사용자의 컴퓨터에는 JRE가 설치되어 있어야만 Java 애플리케이션을 실행할 수 있고
JRE는 사용자가 웹 브라우저를 통해 Java 애플리케이션을 사용하는 동안에 필요한 런타임 환경이다.

 

 

 

 


 

 

JVM 특징 

 

 

1. JVM은 Java로 만들어진 애플리케이션을 컴파일(java compiler)해서 얻은 바이트 코드
컴퓨터가 이해할 수 있는 기계어로 변환해 준다.

2. Java라는 특정 언어를 바로 기계어로 컴파일하지 않기 때문에 운영체제에 종속적이지 않고 독립적이다.

 

 

java compiler : 자바 소스 코드를 JVM이 이해할 수 있는 바이트 코드로 변환하는 작업 
바이트 코드 : 자바 소스 코드(*.java)를 컴파일한 결과물로 JVM이 이 바이트 코드(*.class)를 해석하여 프로그램을 실행한다.

 

 

 

JVM 역할 

자바 애플리케이션을 클래스 로더를 통해 읽고, 용도에 따라서 운영체제로부터 메모리를 할당받는다.

 

 

 

JVM 이미지

jvm 설명 이미지

 

 

 

 

1. 자바 프로그램을 실행하면 JVM은 운영체제로부터 클래스 파일(*.class)을 실행시킬 메모리를 할당받는다.

2. 자바 컴파일러(javac)가 자바 소스 코드(*.java)를 자바 바이트 코드(*.class)로 컴파일한다.

3. Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여
Runtime Data Area(실질적인 메모리를 할당받아 관리하는 영역)에 올린다.

4. Runtime Data Area에 로딩된 바이트 코드는 Execution Engine을 통해 해석된다.

5. 이 과정에서 Execution Engine에 의해 Garbage Collection의 작동과 Thread 동기화가 이루어진다.

 

 

 

 

 

클래스 로더

JVM은 Java 애플리케이션을 실행하기 위해 필요한 클래스 파일들을 로드한다.

이는 필요한 클래스들을 메모리로 읽어오는 과정을 의미한다.

 

'.class' 바이트 코드를 읽어 들여 class 객체를 생성하는 역할을 담당한다.

즉, 클래스 로더는 클래스가 요청될 때 파일로부터 클래스를 읽어 메모리로 로딩하는 역할을 하며 자바 가상머신의 중요한 요소 중 하나이다.

 

 

1. 클래스 로드가 classpath라는 환경 변수에 등록된 디렉토리에 있는 모든 클래스들을 먼저 JVM에 로딩한다.
2. JVM에 로딩된 클래스만이 JVM에서 객체로 사용할 수 있다.
3. 클래스 로딩은 클래스를 로딩하는 시점 또는 실행 중간에도 할 수 있다.
4. 자바의 클래스 로딩은 세부적으로 로딩, 링크, 초기화라는 세 단계 과정을 거친다.

 

 

로딩

클래스 파일을 바이트 코드로 읽어 메모리로 가져오는 과정 

 

 

 

 

링크

가장 복잡한 과정으로, 읽어본 바이트 코드가 자바 규칙을 따르는지 검증하고, 클래스에 정의된 필드, 메소드, 인터페이스들을 나타내는 데이터 구조를 준비하며, 그 클래스가 참조하는 다른 클래스를 로딩한다.

 

 

 

초기화

슈퍼 클래스 및 정적 필드를 초기화한다.

 

 

 

 

 

 

 

 

728x90
반응형
LIST