영호
[Java] JVM메모리 구조 본문
JVM이란?
JVM은 Java Virtual Machine의 약자로 '자바 가상 머신'이라고 부릅니다. JVM으로 인해 운영체제에 구애받지 않고 JDK만 설치되어 있다면, 어느 환경에서든 동일한 Java파일을 실행할 수 있게 해 줍니다.
JVM메모리 구조
- JVM에 대해 크게 4가지로 나누어 보면 Class Loader, Excution Engine, Garbage Collector, Runtime Data Area가 있습니다.
- 지금부터 위 4가지를 하나씩 알아보겠습니다.
Class Loader
- 자바 프로그램의 전체적인 실행 과정은 Java Compiler가 자바 소스코드인 .Java파일을 바이트코드 형태인 .class파일로 변환합니다.
- 이후 해당 바이트코드 파일들을 읽어 실행 시키는 것이 전체적인 실행 과정입니다.
- Class Loader는 Compiler를 거쳐 만들어진 .class파일들을 Runtime Data Area에 적재하는 역할을 수행합니다.
Execution Engine
- Execution Engine은 Runtime Data Area에 있는 바이트코드들을 읽어서 수행하는 역할을 합니다.
- 해당 과정에서 JVM은 인터프리터 방식과 JIT 컴파일러 방식을 혼합하여 사용한다고 합니다.
- JIT 컴파일러에 대한 내용은 다루지 않고 링크를 첨부하겠습니다. https://ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC
Garbage Collector(GC)
- GC는 Java에서 더 이상 참조되지 않는 Heap영역에 존재하는 객체들을 알아서 소멸시켜 주는 역할을 합니다.
- 다른 언어에서 free()를 통해 개발자가 직접 메모리 누수를 방지하지 않아도 Java에서는 GC가 알아서 메모리 누수를 방지해줍니다.
- 구체적인 동작 방식은 추후 알아보겠습니다.
Runtime Data Area
- Method Area
- 모든 Thread가 공유하는 영역입니다.
- class의 정보, interface의 정보, static변수, static method 등의 정보가 담겨있다.
- Java 프로그램 실행 시 Class Loader에서 가져온 .class파일들의 바이트코드 정보들이 담기게 된다.
- static이 붙은 변수, method 역시 동일한 시점에 Method Area에 담깁니다.
- Heap Area
- 모든 Thread가 공유하는 영역입니다.
- 런타임 시 new 키워드를 통해 동적으로 생성된 객체와 배열이 저장됩니다. 주의할 점은 Method Area에 담겨 있는 클래스에 한해서입니다.
- Garbage Collerctor가 Heap Area를 계속 보면서 더 이상 참조되지 않는 것들을 자동으로 소멸시켜 줍니다.
- Stack Area
- method 호출 시 method 별 스택 프레임이 생성되고, Stack Area에 쌓입니다.
- 스택 프레임 안에는 method 필요한 변수 등이 담겨져 있습니다.
- method 호출이 끝나면 Stack Area에서 삭제됩니다.
- 또한 Korea seoul = new Korea(); 를 실행하면 Korea seoul은 Stack Area에 생성되고 동적으로 할당된 인스턴스의 Heap Area주소를 참조하게 됩니다.
- PC register
- Thread가 생성될 때마다 생기는 영역으로, stack-based입니다.
- Native Method Stack
- Java가 아닌 다른 언어를 수행하기 위한 영역입니다.
'Language > JAVA' 카테고리의 다른 글
[Java] List인터페이스 - LinkedList (0) | 2022.06.16 |
---|---|
[Java] List인터페이스 - ArrayList (0) | 2022.06.14 |
[Java] String Constant Pool (0) | 2022.06.08 |
[Java] ==, equals() 차이 (0) | 2022.06.08 |
[Java] Java 컬렉션 프레임워크(Collection Framework) (0) | 2022.05.31 |
Comments