반응형
JVM 메모리 구조 (JVM Memory structure)
- JAVA Source : 사용자가 작성한 JAVA 코드
- JAVA Compiler : JAVA 코드를 Byte Code로 변환시켜주는 기능
- Class Loader : Class파일을 메모리(Runtime Data Area)에 적재하는 기능
- Execution Engine : Byte Code를 실행 가능하게 해석해주는 기능
- Runtime Data Area : 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간
Runtime Data Area
Method Area
- Method Area, Class Area, Code Area, Static Area 로 불리어짐
- JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(Static 변수), 생성자와 메소드를 저장하는 공간
- 클래스 파일의 바이트 코드가 로드되는 곳
- 힙이 아닌 영역 (HotSpot JVM 구현에서)
- 2개의 주요 공간으로 분리됨
- Permanent Generation
- 클래스 정의, 구조, 메소드, 필드, 메소드 (데이터 및 코드) 및 상수로부터 클래스 관련 데이터를 저장
- -XX : PermSize 및 -XX : MaxPermSize를 사용하여 규제 될 수 있음
- PermGen 공간이 부족하면 java.lang.OutOfMemoryError가 발생할 수 있음
- Code Cache
- 캐시 영역은 컴파일 된 코드를 저장하는 데 사용
- 컴파일 된 코드는 원시 코드 (하드웨어 고유)일 뿐이며, Oracle HotSpot JVM에 고유 한 JIT (Just In Time) 컴파일러가 처리
Stack
- Last In First Out (LIFO)
- 메서드 호출 시마다 각각의 스택프레임(그 메서드만을 위한 공간)이 생성
- 메서드 안에서 사용되어지는 값들 저장, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장
- 메서드 수행이 끝나면 프레임별로 삭제
Heap
- new 연산자로 생성된 객체와 배열을 저장하는 공간
- 클래스 영역에 로드된 클래스만 생성가능
- Garbage Collector를 통해 메모리 반환
- Permanent Generation : 생성된 객체들의 정보의 주소 값이 저장된 공간
- New Area
- Eden : 객체들이 최초로 생성되는 공간
- Survivor : Eden에서 참조되는 객체들이 저장되는 공간
- Old Area : New Area에서 일정시간이상 참조되고 있는 객체들이 저장되는 공간
Native Method
- JNI(Java Native Interface)를 통해 호출되는 C/C++ 등의 코드를 수행하기 위한 스택
- 네이티브 메소드의 매개변수, 지역변수 등을 바이트 코드로 저장
- 자바 외의 다른 언어에서 제공되는 메서드들이 저장되는 공간
PC Register
- 현재 수행 중인 JVM 명령 주소를 갖음
- 프로그램 실행은 CPU에서 인스트럭션(Instruction)을 수행.
- CPU는 인스트럭션을 수행하는 동안 필요한 정보를 CPU 내 기억장치인 레지스터에 저장
- 연산 결과값을 메모리에 전달하기 전 저장하는 CPU 내의 기억장치
- Thread가 생성 될 때마다 생성되는 공간
- Thread가 어떤 부분을 어떤 명령으로 실행할 지에 대한 기록
- 현재 실행되는 부분의 명령과 주소를 저장
JAVA8에서 JVM 메모리 모델 변경사항
Perm 영역이 없어지고 Metaspace 공간으로 변경
PermGen 관련 JVM 옵션 (예 : -XX : PermSize 및 -XX : MaxPermSize)는 이제 무시됨
- Metaspcae
- 네이티브 힙 메모리의 일부
- -XX를 사용하여 조정 가능 MetaspaceSize 및 -XX : MaxMetaspaceSize
- java.lang.OutOfMemoryError : 네이티브 공간이 고갈되면 메타 데이터 공간이 수신
Reference
[2] Java Garbage Collection (http://d2.naver.com/helloworld/1329)
반응형
'Computer Science' 카테고리의 다른 글
DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성 (0) | 2017.09.30 |
---|---|
OOP(객체 지향 프로그래밍) 5원칙 및 특성 (0) | 2017.09.30 |
Java 자료구조 비교 (0) | 2017.09.30 |
TCP vs UDP (0) | 2017.09.30 |
TCP 3 Way-Handshake & 4 Way-Handshake (0) | 2017.09.30 |
OSI 7 계층 (OSI 7 Layer) (0) | 2017.09.29 |
프로세스와 스레드(Process vs Thread) (0) | 2017.09.29 |
64비트와 32비트의 차이 (0) | 2017.09.29 |
퀵 정렬, 퀵 소트(Quick Sort) (0) | 2017.09.21 |
계수정렬, 카운팅 소트(Counting Sort) (0) | 2017.09.21 |