JVM (Java Virture Machine - 자바 가상 머신)
- Java와 OS 사이의 중개자 역할
- Java가 OS 종류에 영향 받지 않고 동작하게 해줌
- 자동 메모리 관리 (GC)
Java Source : 사용자가 작성한 자바 파일
Java Compiler : Java Sourece 파일을 JVM이 해석할 수 있는 Byte Code 로 변경해 줌
Java Byte Code : Java Compiler 에 의해 변경 된 결과 물
Class Loader : Class 파일을 JVM으로 로드 하고 Link를 통해 적절히 배치. Runtime 시 동적으로 로드
Execution Engine : Class Loader를 통해 로드 된 Byte Code를 명령어 단위로 수행
Garbage Collector : 참조 되지 않는 객체의 메모리 관리
Runtime Data Area : Java Application이 실행 되면서 OS에서 할당 받은 메모리 영역
1. Method (Static, Class) Area : Class와 Interface에 대한 Field, Method 정보, Static 변수, 상수 정보가 저장 됨 (모든 Thread가 공유)
2. Heap Area : new 명령어로 생성된 인스턴스와 객체가 저장되는 구역(Garbage Collection 이슈는 이 영역에서 일어나며, 모든 Thread가 공유)
3. Stack Area : Method 내에서 사용되는 값들(매개변수, 지역변수, 리턴값 등)이 저장되는 구역 (각 Thread 별로 생성)
4. PC Register : CPU의 Register와 역할이 비슷함. 현재 수행중인 JVM 명령의 주소값이 저장 됨 (각 Thread별로 생성)
5. Native Method Stack : 다른 언어(C/C++ 등)의 메소드 호출을 위해 할당되는 구역으로 언어에 맞게 Stack이 형성되는 구역 (각 Thread별로 생성)
* Java8에서 Metaspace가 도입 되면서 PermGen이 없어지고 Static Object, 상수화 된 String을 Heap Area로 옮겼음
[참조]
http://www.libqa.com/wiki/76
https://12bme.tistory.com/382
https://limkydev.tistory.com/51
'자바' 카테고리의 다른 글
ThreadLocal (0) | 2020.10.12 |
---|---|
Garbage Collection (0) | 2019.02.08 |