본문 바로가기

JAVA

[JAVA] JVM(Java Virtual Machine) 메모리 구조

- 이해한 부분들로 JVM에 관해 정리 하였으나, 정확하게 이해했다고 확답할 수 없습니다.

- 혹 이 포스팅을 보시는 분들께서 잘못된 부분을 지적해주시면 감사하겠습니다.


1. JVM 메모리 구조


- Class Area (Method Area)

- Java Stack

- Heap

- Native Method Stack



2. Class Area (Method Area)

JVM의 모든 Thread가 공유하는 영역.

JVM에 의해 로딩된 클래스들이 저장됨.

구현된 메소드들이 저장됨.

클래스 변수들이 저장됨.

적재된 클래스의 모든 Property는 변경되지 않음.


3. Java Stack

Method가 호출될 때마다 Stack Frame이 생성. 

Java Stack Frame이 모여 Java Stack 이 된다.

Java Stack 의 최상단은 Active Java Stack 이다.

수행되는 Method 정보, 지역변수, 매개변수, 연산 중 발생하는 임시데이터 저장.

하나의 Thread에 각각 Java Stack 이 존재한다.


4. Heap

자바의 객체(인스턴스)들은 여기에 저장된다.

Heap 은 다음과 같이 3영역으로 다시 나뉜다.

   - Permanent Space : JVM 클래스, Constant Pool, 메소드, 등을 위한 영역

   - Young 영역 : 새로생긴 모든객체를 위한 영역

      Eden : 새로 생성된 객체의 영역

      Survivor 1, 2 (from, to) : 새로 생생된 객체들이 시간이 지나 OLD 영역으로 가기전 머무리는 영역

   - OLD 영역 :  생성된지 오래된 객체들의 영역, Full GC의 대상이 된다.


5. Native Method Stack

Native 메소드를 위한 영역.

JVM 명령이 아닌 다른 언어로 구현되어 있다(보통 C언어)

Java Native Interface를 이용해 다른 언어와 연동할 수 있음.



- 참조 링크

http://dryang.egloos.com/4005363