File tree 1 file changed +31
-0
lines changed
1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
1
+ # JVM
2
+ JVM은 크게 3 개의 주요 하위 시스템을 갖는다.
3
+
4
+ 1 . 클래스 로더
5
+ 2 . 런타임 데이터 영역(Runtime data area)
6
+ 3 . 실행 엔진(Execution engine)
7
+
8
+ ## Classloader
9
+ 클래스로더는 클래스가 요청될 때 파일로부터 읽어 메모리로 로딩하는 역할을 한다. 클래스로더는 컴파일 타임이 아닌 런타임에 동적으로 클래스를 처음 참조하는 시점에서
10
+ 클래스를 로딩하고 링킹, 초기화를 실행한다.
11
+ - Loading
12
+ - Linking
13
+ - Initialization
14
+
15
+ ## Runtime Data Area
16
+ 클래스로더가 읽어들인 클래스 파일은 Runtime Data Area 에 적재된다.
17
+ - Method Area
18
+ > 메소드 영역은 JVM 내에 하나만 존재하며 공유자원이다. ` static ` 변수와 같은 클래스 레벨의 데이터가 저장된다.
19
+ - Heap Area
20
+ > 모든 객체, 인스턴스 변수나 배열을 저장한다. 메소드 영역과 힙영역은 메모리를 공유하기 때문에 멀티스레드 환경에서 thread-safe 하지 않다.
21
+ - Stack Area
22
+ > 스레드는 각각 별도의 런타임 스택을 갖는다. 로컬 변수는 스택 메모리에 생성된다.
23
+ - PC Registers
24
+ > 현재 실행중인 명령의 주소를 저장. 각 스레드는 별도의 PC 레지스터를 갑는다.
25
+ - Native Methods Stacks
26
+ > 모든 스레드는 별도의 네이티브 메소드 스택을 갖는다.
27
+
28
+ ## Execution Engine
29
+ - Interpreter
30
+ - JIT Compiler
31
+ - Garbage Collector
You can’t perform that action at this time.
0 commit comments