스택 기반의 자바 가상 머신
자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것
Garbage Collection 수행
자바 컴파일러 javac가 소스코드를 읽어들여 JVM이 이해할 수 있는 바이트코드(.class)로 변환한다.
Class Loader를 통해 class 파일들을 JVM으로 로딩한다.
로딩된 class의 바이트코드를 Execution engine을 통해 바이너리 코드(기계어)로 해석한다.
해석된 바이트코드는 Runtime Data Area에 배치되어 수행이 이루어진다.
프로그램을 수행하기 위해 OS로부터 할당받는 메모리 영역
PC Register, Stack Area, Native Method Stack은 각 쓰레드마다 존재하며,
Method Area와 Heap Area는 모든 쓰레드에서 공유된다.
Type 정보, Runtime Constance Pool, Field 정보, Method 정보, 클래스 변수 등
Class Loader가 읽은 클래스(혹은 인터페이스)의 메타데이터 정보가 저장된다.
new 키워드로 생성된 객체의 인스턴스와 배열이 생성되는 영역이다.
메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.
지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값들이 생성되는 영역이다.
Thread의 Method가 호출될 때 위 정보들이 Frame이라는 단위로 push된다.
Method 호출이 종료되면 stack에서 pop된다.
현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있다.
Java외의 언어로 작성된 네이티브 코드들을 위한 stack이다.
출처
https://velog.io/@litien/JVM-%EA%B5%AC%EC%A1%B0
https://asfirstalways.tistory.com/158
https://jithub.tistory.com/40
https://sgcomputer.tistory.com/64