* JVM 메모리 구조


> Class Loader

: Class 나 Interface 를 JVM 으로 로딩


> Class (Method) Area

> 모든 JVM Thread 에서 공유

: Runtime Constant Pool

- 자바의 클래스 파일에는 constant_pool 이라는 정보가 포함되어 있다. 이 pool 에 대한 정보 실행 시 참조하기 위한 영역이다

: Field Information

- Method Data, Method, Constructor Code


> Heap (= shared memory)

: 메모리 객체들이 할당되며, GC 가 발생

: 여러 Thread 에서 공유하는 Data 들이 저장됨


> Stack

: Thread 가 시작될 때 생성

: Method 가 호출되는 정보인 Frame 이 저장됨

: 지역변수, 임시결과, 메서드 수행과 리턴에 관련된 정보 포함


> PC Register

: Thread 들은 각자의 PC (Program Counter) 를 갖는다. Native Code 를 제외한 Java code 가 실행될 때, JVM 의 instruction 주소를 보관


> Native Method Stack

: 다른 언어로 된 (주로 C, C++) 코드들이 생성될 때의 Stack 정보관리


> Execution Engine

: 로딩된 클래스의 메서드들에 포함되어 있는 모든 Instruction 정보를 실행



* Heap Area


> Young, Old, Perm 영역으로 나누어진다


> Perm Area

: 자바 언어 레벨에서 사용하는 영역이 아니다


> Virtual

: 가상 영역


> Young Area

: Eden 영역과 2개의 Survivor 영역으로 나눠진다

1. 메모리에 객체가 생성되면 Eden 영역에 지정된다

2. Eden 영역에 데이터가 쌓이면, GC 후에 삭제되거나 비어있는 Survivor 영역으로 옮겨진다
    (2개의 Survivor 영역 간에 우선순위는 존재하지 않는다. 하지만, 반드시 한 영역은 비어있어야 한다)

3. Survivor1, Survivor2 영역에서 위 과정이 반복되다가, Young 영역에 더이상 공간이 남지 않으면 객체는 Old 영역으로 이동한다.


> Old Area

'SW > ::: Java' 카테고리의 다른 글

AWT, Swing, Applet  (0) 2022.02.03
JDK 구성 요소  (0) 2021.01.02
//Garbage Collector  (0) 2020.10.10
JIT Compiler  (0) 2020.10.10
Class Loading  (0) 2020.10.10

+ Recent posts