JVM 메모리 구조
JVM(java virtual machine)이란
jvm은 자바를 실행하기 위한 가상 머신의 약자이다. 자바는 os에 종속되지 않는다는 특징이 있는데 JVM이 자바 바이트 코드를 실행할 수 있는 환경을 제공해 준다. 이로 인해 자바는 OS에 관계 없이 독립적이고 어디서든 실행 할수 있게 한것이다.(write once run anywhere)
자바 어플리케이션은 java.c 컴파일러를 통해 Byte cod(.class)이 생성 된다.
1.class loader
class loader는 크게 링킹(Linking),로딩(Loding),초기화(initializing) 작업이 이루어 진다.
Loading은 .class 파일을 읽어오는 단계로 class loader는 Conpile 시점이 아닌 RunTime 시점에 동작한다. 클레스를 동적으로 할당받는특징이있다.
Linking은 로드한 .class 파일을 검증하는 단계이다. .class 파일이 유효한 파일인지 검증하고 메모리에 저장하는 역할을 한다.
initializing는 .class 파일을 읽게 된다. java 코드에서 class와 interface의 값을 지정한 값으로 초기화 해준는 역할을 한다.
2.excute engine
excute engin은 class로더를 통해 Runtime Data area에 적재된 byte코드를 명령어 단위로 읽어 실행한다. 인터프린터와 JIT 컴파일러를 통해 컴퓨터가 이해할 수 있게 변환 해주는 일을 한다.
3.GC(garbage collector)
heap영역에 적재된 객체들 중 참조되지 않는 객체를 탐색 후 제거하는 역할을 한다.
4.Runtime Data area
자바 어플리케이션을 실행할때 사용되는 데이터가 저장되는 장소로 크게 Heap,Stack,Pc,Class,Navite Method 영역으로 나눌수 있다.
4-1 Heap 영역
객체와 배열이 적재되는 영역으로 참조 되지 않는 객체는 GC가 삭제해 버리는 영역이다.
4-2 stack 영역
LIFO구조로 함수가 호출 될때 생성되는 영역으로, 매개변수,지역변수 등의 임시 데이터 저장
4-3 Pc 영역
현재 실행중인 JVM의 주소를 나타내고 있다.
4-4 Native Method 영역
java코드 이외의 네이티브 코드를 적재하는 부분이다.
4-5 class 영역
JVM에서 읽어드린 클레스, 인터페이스,메서드,static 변수등을 저장한다.
Heap영역과 Class영역은 모든 자원을 공유하고 나머지 영역들은 독립적인 영역을 가지고 있다.