본문 바로가기

자바

JVM 메모리 구조

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