JVM?
- JVM : Java Virtual Machine, 자바 가상 머신
- 어떤 OS에서 동작할 수 있다는 이식성이 있으며, 스택기반으로 이루어져 있다!
JVM은 다음과 같은 2가지 기능을 제공한다.
① 메모리 관리
② Garbage Collection
Why JVM?
- Java 프로그램을 설계할 때, 알 수 없는 버그나 오류가 발생한 경우 빠른 디버깅을 위해
- 프로그래머가 동작과정을 숙지하고 있어야 한다
JVM 구조
Class Loader
- 클래스 로더, Runtime시에 동적으로 클래스를 로드하여 링크를 통해 배치하는 작업을 수행하는 역할!
- Java는 컴파일 타임에 클래스를 참조하는게 아니라 Runtime에 참조한다!!
Execution Engine
- Class Loader가 Runtime Data Area에 바이트 코드를 배치하면, 이를 수행하는 역할을 한다
Garbage Collector
- 말 그대로 쓰레기를 수집한다. = 더 이상 사용되지 않는 메모리를 수거한다
* 하지만 어떻게??
- Heap 영역 내에 객체중 참조되지 않는 객체(Instance)를 Garbage라 하며, 이를 찾아서 삭제한다!
- Root Reference로 부터 Reachable할 수 있는 객체는 냅두고, UnReachable한 객체를 삭제하는 것!
PC Register
= Program Counter Register
- Code를 수행할 때 있어서, 기계어로 변환하는 과정이 있는데 코드 실행에 대한 상태를 기록하기 위한 영역
- 코드상 현재 어느 위치에 있고, 다음에 어디로 가야할지 알게 된다!
Stack Area
- Main메소드를 실행하면, 각종 지역 변수, 임시 데이터, 메소드 호출에 대한 정보를 저장하는 영역!
- 메소드 영역 내에 저장할 것이 많아지면, 스택에 쌓이는 메모리도 당연히 증가한다!
Native Method Stack
- Java 프로그램이 컴파일되어 생성되는 Byte Code 가 아닌 실행할 수 있는 기계어로 작성된 프로그램을 실행하는 영역
- 한마디로, Java외의 다른 언어로 작성된 코드가 들어갈 수 있다! ( C )
Method Area = Class Area
- Class 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간!
- 다시말해서, Class라는 '붕어빵틀'과 같은 거대한 틀을 메모리에 저장하는 공간이다.
- 컴파일된 모든 Byte Code가 메모리에 올라간다!!
- 이 공간에는 Runtime Constant Pool 이 있는데, 여기에는 상수(static final) 자료형을 저장한다!
* 올라가는 정보들
1. Field 정보 : 멤버변수에 관한 정보
2. Method 정보 : 메소드 이름, 리턴타입, 매개변수, 접근제어자 관한 정보
3. Type 정보 : class속성(interface/class/super class)에 대한 정보
Heap Area
- 객체를 저장하는 가상 메모리 공간이다!
* 객체란?
- 클래스가 인스턴스화 되었다! = Class가 메모리에 인스턴스화 되었다! = new Class()
Ex) Person p = new Person()
p -> stack영역(주소값으로), new Person() 인스턴스는 Heap영역
Permanent Generation
- 생성된 객체들의 주소값이 저장되는 공간, Class의 주소, Meta data에 대한 주소
- Reflection을 사용하여 동적으로 Class를 로드할 수 있다!
New/Young Generation
- Eden : 객체들이 최초로 생성되는 공간
- Survivor : Eden에서 참조되는 객체들이 저장되는 공간
Old Area
- New Area에서 살아남은 객체들이 저장되는 공간
- Eden 영역이 가득차게 되면, 처음으로 GC가 발생한다.
= Eden 영역에 있는 값을 Survivor1로 복사하고, 나머지는 삭제한다.
- 그 다음 Eden과 Survivor1이 모두 꽉차면, 안쓰는 것은 전부 삭제하고 Survivor2로 복사한다!
- Survivor2에서 일정 횟수이상 참조되는 객체들은, Old Area로 이동한다!
참조
JVM구조와 자바 런타임 메모리구조
자바 가상 머신, JVM이란 무엇인가?
가비지컬렉션
'Developer > Kotlin & Java' 카테고리의 다른 글
SOLID - LSP(Liskov Substitution Principle)이란? 리스코프 치환 원칙 (0) | 2019.11.22 |
---|---|
SOLID - OCP(Open Closed Principle) : 개방 폐쇄 원칙 (0) | 2019.11.17 |
SOLID - SRP(Single Responsibility Principle) : 단일책임 원칙 (2) | 2019.11.17 |
[자바] 리플렉션 - Reflection (0) | 2019.04.11 |
[자바] 동기화 처리 - Synchronized 와 Asynchronized (2) | 2019.04.10 |