본문 바로가기
언어/Java

[Java] JVM 메모리 구조 (JVM Memory Structure)

by Geunny 2020. 8. 4.
반응형

JVM 이란 Java Virtual Machine, 자바 가상 머신의 약자를 떠서 줄여 부르는 용어이다.

JVM 의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여

자바 API와 함께 실행한다.

 

또한 JVM은 Java 와 OS사이에서 중개자 역할을 수행하여

Java 가 OS에 구애받지 않고 재사용을 가능하게 해준다.

 

JVM 메모리 구조는 크게 4개로 나뉘어 져잇다.

 

https://m.blog.naver.com/PostView.nhn?blogId=kywpcm&logNo=30170981872&proxyReferer=https:%2F%2Fwww.google.com%2F

1. Method Area (Class Area)

 

해당영역은 JVM이 시작될 때 생성(Class Loader)되며, 

JVM에 의해 loading 된 클래스들이 저장된다.

 

클래스에서 구현한 메소드들과 

상수들 (Constant Pool)을 저장한다.

또한 static 변수 또한 해당 메모리에 저장된다.

 

해당 변수들은 프로그램 종료까지 메모리에 존재한다.

장점 : 프로그램이 종료되기 전 까지 어디서든 사용가능.

단점 : 무분별하게 많이 사용하면 메모리가 부족할 수 있음.

 

2. Heap Area

 

Heap 영역은 Java Object 들이 저장되는 공간이다.

해당 영역에 생성된 객체 or 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

만약 참조하는 변수, 필드가 없으면

JVM 이 GC(Garbage Collector)를 실행하여 해당 객체를 제거한다.

Heap 영역은 크게 3 공간으로 분류된다.

 

1) New(Young Generation) : 생성된지 얼마 안된 객체들이 저장되는 장소이며,

대부분의 객체가 이 영역에서 생성되었다가 Minor GC를 통해 사용되지 않는 객체는 제거된다.

 

2) Old Generation : 생성된지 오래된 객체들이 저장되는 장소이며,

Young 영역에서 살아남은 객체가 이곳으로 옮겨지고 Full GC를 통해 사용되지 않는 객체가 제거된다.

 

3) Permanent Generation : 프로그램 코드가 올라가는 장소이며,

Code가 모두 로딩되고 나면 거의 일정한 수치를 유지한다.

Old 영역에서 살아남은 객체가 영원히 남아 있는 곳은 절대 아니다.

여기서 GC가 발생하면 Major Gc에 포함된다.

 

3. Java Stack 영역

 

JVM 스택영역은 Java 에서 Thread가 실행될 때 해당 영역을 할당받게 된다.

각 Thread마다 하나씩 해당 메모리에 머물게 된다.

JVM 스택 메서드를 호출 시 프레임을 추가(push)하고 메서드가 종료되면

해당 프레임을 제거(pop)한다. (Stack 방식으로 진행 - LIFO(Last In First Out))

 

4. Native Method Stack 영역

 

일반적으로 JVM은 네이티브 방식을 지원한다.

따라서 스레드에서 네이티브 방식의 메소드가 실행되는 경우

Native Method Stack에 쌓이게 된다.

 

(여기서 말하는 네이티브 방식의 메소드란 Java가 아닌 다른 언어로 작성된 코드를 의미함.)

 

일반적인 메소드를 실행하는 경우 JVM 스택에 쌓이다가

해당 메소드 내부에 네이티브 방식을 사용하는 메소드 ( ex) c언어로 작성된 메소드)가 있으면

해당 메소드는 네이티브 스택에 쌓인다. 

 

 

간단히 정리하면 아래와 같다.

 

메모리 영역 저장되는 값들
Class Area(Method Area) Class, static value, String literal, Primitive value
Heap Area Object
Java Stack Area Thread
Native Method Stack Native Method

 

 

 

 

 

저도 공부중이라

혹시라도 잘못된 정보가 있다면 댓글로 남겨주세요. ㅎㅎ

댓글