JAVA - JVM Run-Time Data Area

Java

Java 공부를 정리 tag


JVM Run-Time Data Area

JVM이라는 프로그램이 OS위에서 실행되면서 할당받는 메모리 영역

지난 포스팅에서 나온 사진을 다시 보면서 시작하도록 하자.

javaJVM_internal1

사진 출처 : Naver D2


javaJVM_internal2_1

저번 포스팅까지는 .class 파일이 JVM에 어떻게 loading되는지까지 알아봤다. 이번 포스팅에서는 JVM 쓰는 메모리 공간인 Run-Time Area 에 대해 알아보도록 하자.


Method Area

라고 한다… 하지만 너무 생소해서 와닿지가 않았다. 다음 공식문서에 대한 글을 읽으니 좀 감이 왔다.

The method area is analogous to the storage area for compiled code of a conventional language or analogous to the “text” segment in an operating system process.

Method Area 는 예전 언어의 컴파일된 코드를 위한 저장 영역이나 OS process의 ‘text’ 영역과 유사하다. 라는 말인데 이렇게 들으니깐 이해가 갔다.


Heap

The heap is the run-time data area from which memory for all class instances and arrays is allocated.

라고 공식문서에서 말한다.


Java Stacks

각 Thread별로 따로 할당받는 영역.


Stack 에서 push되는 Frame 과 Heap영역과의 관계를 아래 그림으로 살펴보자.


PC register

Program Counter를 의미. 현재 Thread가 실행되는 부분의 address와 명령을 가리킨다.


Native Methods Stacks

An implementation of the Java Virtual Machine may use conventional stacks, colloquially called “C stacks,” to support native methods (methods written in a language other than the Java programming language).

Java 외의 언어로 작성된 native code를 위한 stack이다.

JVM 구현체는 native method를 지원하기 위해 일반적으로 C stack이라고 불리는 기존의 stack을 사용할 수 있다고 한다. 해당 영역이 존재하는 이유는 Java로 작성된 프로그램을 실행하면서 순수하게 Java로 구성된 코드만을 사용할 수 없는 시스템 자원이나 API가 존재하기 때문이다.


Execution Engine

Class Loader에 의해 메모리에 올라온 bytcode들을 기계어로 변경해 명령어 단위로 실행하는 역할.

시간이 없어서 자세한 내용은 나중에 다루도록 하겠다.


Rerference

우아한Tech Youtube

Tecoble - JVM

Naver D2 - JVM

Oracle Java SE8 JVM Spec

Execution Engine

JIT

Wikipedia 참고