JVM 메모리모델

권혁모·2022년 9월 15일
0

JVM 구조

JVM(Java Virtual Machine)의 구성은 다음과 같다.

출처: https://asfirstalways.tistory.com/158

  • Class Loader(클래스 로더): .class파일을 로드하고 배치한다.
  • Execution Engine(실행 엔진): 바이트코드를 기계가 수행할 수 있게 하며, 인터프리터와 JIT의 방식을 사용한다.
  • Runtime Data Area: 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간

Runtime Data Area

출처: https://asfirstalways.tistory.com/158

  • PC Register: Tread가 어떤 부분을 어떤 명령으로 실행해야할 지에 대한 기록을 하는 부분. 현재 수행중인 JVM명령의 주소를 갖는다.
  • JVM Stack: 실행 과정에서 임시로 할당되었다가 메소드를 빠져나가면 소멸되는 데이터를 저장하기 위한 영역. 변수, 임시 데이터, 스레드나 메소드의 정보를 저장한다.
  • Native method stack: JAVA 프로그램이 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행 시키는 영역
  • Heap: 객체를 저장하는 가상메모리 공간.
  • Method Area(Class Area, Static Area): 클래스 정보를 처음 메모리 공간에 올릴 떄 초기화되는 대상을 저장하기 위한 메모리 공간

Heap

출처: https://docs.oracle.com/en/java/javase/18/gctuning/garbage-collector-implementation.html#GUID-16166ED9-32C6-402D-BB22-FD85BCB04E57

Eden에서는 새로운 객체가 생성된다. JVM은 에덴을 여러 버퍼로 나누어 각 애플리케이션 스레드가 새 객체를 할당하는 구역으로 활용하도록 배포한다. Minor GC가 발생하게되면 Eden 영역에 존재하는 객체 중 사용하고 있는 객체는 Survivor 영역으로 옮겨지게된다. 반복되다 Survior영역이 차게되면 Suvivor 영역의 살아남은 객체를 다른 Suvivor영역으로 이동시키고 마지막에는 Old영역으로 옮겨지게 된다.

출처 및 참고

0개의 댓글