1. Class Loader
.class 로 컴파일된 자바 바이트 코드는 메모리에 저장된다.
1-1. Loading
로딩이 시작되면 저장된 클래스 파일을 메모리로부터 읽는다.
1-2. Linking
링킹이 시작되면 클래스 파일 내 객체, 레퍼런스 간 연결을 수행한다.
1-3. Initialization
초기화 과정에서는 모든 static 값들을 초기화하고, 변수에 할당한다.
2. Memory
1-1. method
•
메모리 영역에는 클래스, 부모클래스, 메소드, 변수 등이 저장된다.
•
프로그램 내 어디에서든지 참조할 수 있는 공유자원이다.
1-2. heap
•
힙 영역에는 객체가 저장된다.
•
역시 프로그램 내 어디서든 참조할 수 있는 공유 자원이다.
1-3. stack
•
쓰레드가 시작되면 런타임 스택이 생성된다.
•
이제 메소드가 호출될 때마다 런타임 스택에 스택 프레임 블럭이 쌓이게 된다.
•
쓰레드가 끝나면 런타임 스택도 비워지게 된다.
1-4. program counter register
•
쓰레드 별로 수행할 명령어의 위치를 가리키는 포인터이다.
1-5. native method stack
•
네이티브 메소드를 호출할 때 쌓이는 스택이다.
•
역시 쓰레드 단위로 생성되며, 쓰레드가 끝나면 사라진다.
3. 실행 엔진, execution engine
3-1. interpreter
•
바이트 코드를 한줄씩 읽는다.
3-2. JIT compiler (Just In Time)
•
인터프리터가 바이트 코드를 읽을 때, 반복되는 구절이 있다면 전부 네이티브 코드로 변환해버린다.
•
이후 인터프리터가 반복되는 코드를 읽는다면, 그냥 네이티브 코드 자체르 실행하기만 하면 된다.
•
효율이 증가한다.
3-3. GC (Garbage Collecttion)
•
더이상 참조되지 않는 객체를 모아서 정리하는 역할을 한다.
4. JNI, Native method interface
•
자바 프로그램에서 C, C++, assembly 언어로 작성된 네이티브 메소드를 실행할 수 있도록 해준다.
•
메소드에 native 키워드가 붙은 메소드들을 말한다.
5. Native method library
•
C, C++로 작성된 라이브러리를 말한다.