JVM이란? (2)


이번 Posting 에서는 Runtime data area에 대하여 정리를 한다.

Runtime Data Areas는 JVM이 프로그램을 수행하기 위해 OS로 부터 별도로 할당 받은 메모리 공간이다.


Runtime Data Areas는 다음과 같은 영역으로 나뉜다.

  • PC Register                       - 별도의 thread
  • Java Virtual Machine Stacks  - 별도의 thread
  • Native Method Stacks         - 별도의 thread
  • Method Area
  • Heap

Method Area, Heap는 모든 Thread가 메모리를 공유하기 때문에 동기화 이슈가 발생한다.

  • PC register는 각 스레드마다 존재하고 스레드가 시작될 때 생성되고 또한 JVM 명령의 주소를 갖는다. 
  • Stack은 JVM의 스택인데 역시 스레드 마다 존재하고 스레드가 시작될 때 생성된다. Stack frame 이라는 구조체를 저장하는 스택으로, 동작은 일반적인 Stack과 같다.
  • Native method Stack은 JAVA 외의 언어로 작성된 네이티브 코드를 위한 스택으로 JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택임. 언어에 맞는 스택이 생성된다.
  • 위 그림에는 class라고 되어있지만 메서드 영역은 모든 스레드가 공유하는 영역으로 JVM이 시작될 때 생성된다. 클래스, 인터페이스 의 정보, static 변수, 메서드의 바이트코드 등을 저장한다. Permanent Area라고도 불린다.
  • 힙: 인스턴스 또는 객체를 저장하는 공간으로 가비지 컬렉션 대상이다. JVM 성능 등의 이슈에서 가장 많이 언급되는 공간이다. 힙 구성 방식이나 가비지 컬렉션 방법 등은 JVM 벤더의 재량이다.

이 블로그의 인기 게시물

웹툰 무료로 볼 수 있는 사이트

BackJoon 1011, Fly me to the alpha centauri, 규칙 찾기 문제

BaekJoon 6591, 이항 쇼다운 조합문제