-
Notifications
You must be signed in to change notification settings - Fork 0
김승수, 김현수, 이호석 JVM
이호석 edited this page Jul 10, 2024
·
4 revisions
Java Virtual Machine
Java로 작성된 언어 혹은 JVM을 사용하는 언어를 실행시키기 위한 가상 머신 입니다.
-
ClassLoader
:.java
코드를 컴파일한.class
파일인 바이트코드를 읽어 Runtime Data Area에 적재하는 과정을 진행합니다.-
Loading
- 클래스를 로딩하는 과정 3가지의 대표적인 클래스로더를 거쳐서 클래스를 로딩함 → 안되면
ClassNotFoundException
- 조회 순서는 Application → Extension → Bootstrap
- 반환 순서는 Bootstrap → Extension → Application
-
로드 타임 동적 로딩
,런타임 동적 로딩
이 존재함
- 클래스를 로딩하는 과정 3가지의 대표적인 클래스로더를 거쳐서 클래스를 로딩함 → 안되면
-
Linking
-
검증
: 클래스가 자바 언어 명세 및 JVM 명세에 명시된데로 구성되어 있는지 검사함 -
준비
: 클래스가 필요로 하는 메모리를 할당한다. 필드, 메소드, 인터페이스를 나타내는 데이터 구조를 준비함 -
분석
: 심볼릭 레퍼런스(클래스 상수 풀 내 모든 심볼릭 레퍼런스 #10과 같은)를 실제 메모리 레퍼런스로 교체 - 클래스 로딩 과정에서 제일 오래 소요되는 과정입니다.
-
-
Initalization
- 링크 단계에서 확보된 메모리 영역에 클래스의 static 변수를 명시된 값으로 할당함
-
-
Runtime Data Area
: JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.- Method Area
- Heap Area
- Stack Area
- Operand Stack
- PC Registers
- Native Method Stack
-
Execution Engine
: 메모리에 적재된 바이트코드들을 기계어로 번역해 명령어 단위로 실행하는 역할을 한다.-
인터프리팅
을 기반으로 진행하는데,JIT 컴파일러가 네이티브 코드로 컴파일
해주어(재사용할 수 있게) 최적화를 해줍니다. -
Garbage Collector
가 Heap 영역에서 참조가 사라진 객체들을 메모리를 회수해준다.
-
-
Native Method Interface(JNI)
: 자바 애플리케이션이 네이티브 코드를 호출할 수 있도록 하는 인터페이스이다. (네이티브 코드는 C, C++로 작성되어 있는 라이브러리 형태)- 파일을 읽거나, 소켓을 만들거나, 스레드를 만들때(네이티브 스레드를 사용하고 있으므로) 사용된다.