on
[Java] JVM
[Java] JVM
728x90
JVM : Java Virtual Machine
JVM = Class Loader + Garbage Collector + Runtime Data Area + Execute Engine
1. Class Loader
- 컴파일러에 의해 .java 파일을 .class 파일 ( Byte Code )로 생성
- .class 파일들을 모아 Runtime Data Area 형태로 메모리에 적재
2. Runtime Data Area
1) Method Area
- JVM이 시작할 때 생성되고, 모든 스레드들이 공유하는 영역
- 클래스 멤버 변수, 메소드 정보, Class/Interface 정보, static, final 변수 등
2) Heap Area
- 동적으로 생성된 객체와 배열이 저장되는 영역 , Garbage Collection의 대상
3) Stack Area
- 지역 변수, 매개 변수 등 / Stack은 Thread 별로 독자적으로 생성
* 객체 생성 시 실제 객체는 Heap에 할당 , 해당 Reference만 Stack에 저장
int[] scores = {10, 20, 30};
4) PC Register
- 현재의 Thread가 실행되는 부분의 주소와 명령을 저장
- 현재 명령이 끝난 뒤에 값을 증가 , 해당하는 값의 명령을 실행
5) Native Method Stacks
- Java 이외의 언어로 작성된 코드를 실행할 때 Native Method Stack이 할당
3. Execution Engine
- Memory에 적재된 클래스들을 기계어로 변경하여 명령어 단위로 실행하는 역할
* Interpreter 방식 : 명령어를 하나 하나 실행하는 방식
* JIT 방식 : 실행 시 자주 쓸만한 코드들을 기계어로 변환 시켜 저장해두는 방식
4. Garbage Collector
- 정리되지 않는 메모리, 유효하지 않은 메모리 주소, 사용할 수 없는 메모리 정리
- Heap Memory 영역에 생성 된 객체들 중 쓸모 없는 객체 탐색 후 제거
-> Garbabe를 판별하기 위해 Reachability라는 개념을 사용
유효한 참조가 있으면 'reachable' , 그렇지 않으면 'unreachable'로 구분
- C++과 같은 다른 언어에서는 객체의 메모리를 직접 해제 해주어야 한다
728x90
from http://newbie-block.tistory.com/55 by ccl(A) rewrite - 2021-09-29 16:27:08