1. JVM 구조
코드가 실행되는 과정
JDK 구조
JDK : Java Development Tool + JRE(Java Runtime Environment + JVM(Java Virtual Machine))
JVM 구조
- Class Loader Subsystem : .class에서 바이트코드를 읽고 메모리에 저장함
- Memory
- Method Area
- Heap Area : 객체를 저장
- Stack Area : 코드의 흐름이 스택처럼 행동을 함.
스레드마다 런타임 스택을 만들고, 스택 프레임이라 부르는 블록을 쌓음- Execution Engine(실행엔진)
- JIT 컴파일러가 반복되는 코드를 재사용해서 속도를 높임
- GC(Garbage Collector) : 더이상 참조되지 않는 객체를 모아서 정리함
- JNI(Java Native Interface)
- C, C+, 어셈블리로 작성된 함수를 사용할 수 있는 방법을 제공함
- Java에서 기본으로 제공되는 메서드에 native 키워드가 붙은 친구
- Native Method Libraries
- C, C++로 작성된 라이브러리
2. 클래스 로더와 static 영역
- Loading
- 클래스 로더가 .class 파일을 읽고 데이터를 “Method Area”영역에 저장함
- Method Area에 저장하는 데이터들 : FQCN, Class, Interface, Enum, Method, Variable
- Linking
- Initalization
- “Static“ 붙은 친구들 초기화. static 블럭 실행
3. Memory Area
- Method Area : 클래식 영역, 스태틱 영역
- Stack Area : Thread 영역
- Static Area : 클래스와 static
- Stack Area : methods
- Heap Area : Instances