본문 바로가기
Tech/Java

JVM의 메모리 구조

by Augustine™ 2018. 5. 4.
반응형

JAVA 프로그램이 실행되면, JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받고, 

JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.



Compiler는 텍스트로 되어 있는 Source Code 를 Class File로 변환시켜 준다.

Class Loader는 JVM 내의 클래스를 로드하고 Link를 통해 적절히 배치하는 일련의 작업을 수행하는 모듈로서, 런타임 시 동적으로 Class를 로드 한다.

Execution Engine는 Class Loader를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드는 Execution Engine에 의해 실행되며 Execution Engine은 JAVA 바이트 코드를 명령어 단위로 읽어서 실행한다.

Runtime Data Area는 java 프로그램을 실행하기 위해 운영체제로부터 할당 받은 메모리 영역으로서 총 5개의 영역으로 나뉜다.


1) Class 영역은 Method Area, Code Area, Static Area 로도 불리어지며, 클래스가 로딩되는 영역이다.

Class 영역에는 클래스정보와 변수정보, 메소드 정보, 상수pool 등의 정보가 있다.

2) Stack Area에는 메소드 호출 시마다 각각의 스택 프레임이 생성된다. 

메소드 안에서 사용되는 값들을 저장, 호출된 메소드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다.

메소드 수행이 끝나면 프레임별로 삭제가 된다.

3) Heap Area에는 new 연산자로 생성된 객체와 배열을 저장하는 공간이다.

Class area에 로드된 클래스만 생성가능하며, Garbage Collector를 통해 메모리가 관리된다.

Permanent Generation에는 생성된 객체들의 정보에 대한 주소 값이 저장된다.

New area의 Eden에는 객체들이 최초로 생성되는 공간이며, Survivor에는 Eden에서 참조되는 객체들이 저장되는 공간이다.

Old area에는 New Area에서 일정시간 이상 참조되고 있는 객체들이 저장되는 공간이다.


4) Native method area는 Java외의 다른 언어에서 제공되는 메소드들이 저장되는 공간이다.

5) PC Register에는 Thread가 생성될 때마다 생성되는 공간이며, Thread가 어떤 부분을 어떤 명령으로 실행할 지에 대한 기록을 한다.

그리고, 현재 실행되는 부분의 명령과 주소를 저장한다.

반응형

'Tech > Java' 카테고리의 다른 글

Selenium WebDriver  (0) 2019.03.07
Java collection - Set  (0) 2018.05.09
Java Synchronized을 이용한 트랜잭션 예제  (0) 2018.04.26
Thread 예제  (0) 2018.04.25
List<Object>를 List<Long>로 변환  (0) 2017.02.21

댓글