티스토리 뷰
Java Virtual Machine이란?
- Java로 개발한 프로그램을 컴파일하여 만들어지는 바이트코드를 실행시키기 위한 가상머신.
- JRE(Java Runtime Environment)에 포함되어 있다.
- Class Loader, Runtime Data Area, Execution Engine, JNI, Native Method Library으로 이루어져 있다.
Class Loader
- .class 파일을 JVM의 Runtime Data Area에 배치한다.
Runtime Data Area
- Method 영역, Heap 영역은 모든 쓰레드가 공유하는 영역.
- Stacks, PC registers, Native Method Stacks은 쓰레드 마다 하나씩 생성되는 공간.
- Method 영역은 JVM이 시작될때 생성되는 공간.
바이트코드, 클래스, 변수의 정보, Static 변수가 저장된다.
- Heap 영역은 동적으로 생성된 객체가 저장되는 영역.
new 연산을 통해서 동적으로 생성된 인스턴스 변수(String, Array 등)가 저장된다.
Garbage Collection의 대상이 된다.
- Stack 영역은 지역변수나 메서드의 매개변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역.
Reference Type(class, interface, enum, Array)의 객체를 Heap에 저장하고 그 주소를 Stack 영역에 저장하여 사용한다. 예) (Stack)-> Person p = new Person(); <-(Heap)
- PC(Program Counter) Register는 각 쓰레드는 메서드를 실행하고 있고, PC는 그 메서드 안에서 몇 번째 줄을 실행해야 하는지 나타내는 역할.
- Native Method Stack은 Java가 아닌 다른 언어로 작성된 코드를 위한 공간.
Execution Engine
- Load된 Class 파일의 바이트코드를 실행한다.
- Interpreter, JIT Compiler, Garbage Collector로 나눔.
- Interpreter는 명령어를 한줄씩 해석하면서 실행.
- JIT Compiler는 실행 시점에 자주 쓸만한 코드들을 기계어로 변환 시켜놓고 저장해서 실행.
- Garbage Collector는 Heap 영역에 생성된 객체들 중에 Reachability를 잃은 객체를 탐색 후 제거하는 역할.
Native Method Interface(JNI)
- JVM에 의해 실행되는 코드 중 네이티브로 실행하는 것이 있다면 해당 네이티브 코드를 호출하거나 호출 될 수 있도록 만든 일종의 프레임워크.
Native Method Libraries
- 네이티브 메소드 실행에 필요한 라이브러리.
참고
namu.wiki/w/%EC%9E%90%EB%B0%94%20%EA%B0%80%EC%83%81%20%EB%A8%B8%EC%8B%A0?from=JVM
www.youtube.com/watch?v=AWXPnMDZ9I0&list=TLPQMDgwNDIwMjFUy2LZh_aEhA&index=1
velog.io/@litien/JVM-%EA%B5%AC%EC%A1%B0
www.youtube.com/watch?v=UzaGOXKVhwU&list=TLPQMDgwNDIwMjFUy2LZh_aEhA&index=3
'Language > Java' 카테고리의 다른 글
Overflow가 발생하면 어떻게 될까? (0) | 2022.04.27 |
---|---|
JVM의 Garbage Collector (0) | 2021.04.09 |
10진수 <-> 2, 8, 16진수 변환 (0) | 2021.02.28 |
데이터 타입별 형변환 방법 (0) | 2021.02.22 |
copyOf() / copyOfRange() (0) | 2021.02.18 |