-
JVM 메모리 구조Java 2018. 7. 12. 11:01반응형
JVM 메모리 구조는 어떤가...
1. JVM 메모리 구조
Method Area
Heap
Stack
PC 레지스터
Native Method Stacks
1. Permanent Generation
2. New / Young Generation
3. Old Generation
- JVM의 메모리 구조는 크게 5가지로 Method Area, Heap, Stack, PC 레지스터, Native Method Stacks 로 이루어져있습니다.
간단하게는 Stack 영역에는 local variable이 저장되고, Heap 영역에는 모든 객체의 속성 정보가 저장됩니다.
1) Method Area
- Java 실행 단계 중 Class loading 단계에서 Type, 상속, Package, Class, Method, 멤버 변수 정보, static 변수, 상수 등 정보를 적재합니다.
- Class loading 단계에서 클래스에 관련된 메타 정보를 적재합니다.
- JVM이 시작 시 생성되고 프로그램이 종료되거나 명시적으로 null을 선언하면 종료된다. 또한 GC의 대상입니다.
- 모든 Thread에서 공유합니다.
* Java 실행 단계 ( 1. Class loading --> 2. ByteCode 검증 --> 3. 실행 단계(main 부터 시작)
2) Heap
- 프로그램 상에서 데이터를 저장하기 위해 동적으로 할당하여 사용하는 영역입니다.
- new 연산자로 생성된 객체의 속성 정보 또는 인스턴스, 배열을 저장합니다. (해당 객체의 주소값을 생성하여 참조케 합니다.)
- 모든 Thread에서 공유합니다.
- 객체가 더 이상 쓰이지 않거나 명시적으로 null 선언 시에 종료됩니다. 또한 GC의 대상입니다.
- Permanent Generation은 Class, Method에 대한 Meta 정보를 저장합니다.
- Old는 Young Generation 영역에서 저장되었던 객체 중에서 시간이 지나 오래된 객체, 우선 순위가 낮아진 객체가 이동되어서 저장되는 영역입니다.
3) Stack
- FILO(First In Last Out) 구조 입니다.
- Method 안의 정보( 지역 변수, 매개 변수, 리턴 값)과 연산 중 발생하는 임시 데이터를 저장합니다.
- 중괄호 {} 나 Method가 끝날 때 종료됩니다.
- 각 Thread로 생성됩니다.
4) Native Method Stacks
- 자바 외 언어로 작성된 네이티브 코드를 위한 Stack 입니다. ( C나 C++과 같은....)
- native 메소드의 매개변수, 지역변수 등을 바이트 코드로 저장합니다.
- 각 Thread로 생성됩니다.
반응형'Java' 카테고리의 다른 글
객체 지향1. 캡슐화(Encapsulation)은 무엇일까? (0) 2018.07.13 가비지 컬렉션(Garbage Collection)??? (0) 2018.07.12 자바의 아버지는 누구인가? (0) 2018.07.11 Java 프로그래밍 언어 플랫폼(SE, EE, ME, FX) (0) 2018.07.11 JDK, JRE, JVM이란 무엇일까? (0) 2018.07.10