안녕하세요. 자바 메모리 구조 (Java Memory Structure) 관련 포스트를 다뤄보려고 합니다.
거의 지금까지는 기능 개발에만 집중하다가 성능상 이슈가 있어 GC나 Tomcat 튜닝 등을 진행하려다 보니 메모리 공부를 하게 되어 이참에 이렇게 공유하게 되었습니다.
아직 부족한 내용이 많아 우선 포스팅하고 계속 업데이트할 예정이니 부족한 내용이 있다면 댓글을 통해 피드백 부탁드립니다.
JVM(Java Virtual Machine) 이란?
Java는 처음 우리 앞에 나타났을 때부터 가장 이목을 끌었던 부분이 ‘OS에 구애받지 않고 동작한다’는 것이었습니다.
그걸 가능케 했던 것이 JVM이었습니다.
JVM은 자바의 바이트 코드를 실행할 수 있게 해주는 주체이며, OS 뿐만 아니라 CPU(32비트, 64비트와 같은)에도 구애 받지 않고 동작하게끔 도와줍니다.
JVM 구조
JVM의 대략적인 모양은 위와 같습니다.
Memory 영역인 Runtime Data Area를 기반으로 Java 동작을 도와주는 ‘Execution Engine’, ‘Class Loader’, ‘Garbage Collector’ 가 있습니다.
각각의 기능에 대해서는 아래 소제목에서 다루도록 하겠습니다.
Class Loader
Java는 기본적으로 ‘Java Compiler’를 통해 컴파일을 통해 컴퓨터가 이해할 수 있는 바이트(Byte) 형식의 ‘.class’파일을 생성합니다.
Class Loader는 이 ‘.class’파일들을 JVM 내의 메모리 영역(Runtime Data Area)에 올리는 역할을 합니다.
이 과정은 자바가 실행될 때 동작하지만, 그 이후에 필요한 과정에도 계속해서 동작합니다.
Execution Engine
이 내용은 차후 업데이트에 보충하도록 하겠습니다.(아직 그림을 못그렸습니다..)
Garbage Collector
흔히 GC라고 불리는 Garbage Collector 입니다.
아래 내용에서 Heap Area에 대해 심도 있게 다룰 예정인데, 그 영역에 계속해서 데이터가 적재됩니다.
그 과정에서 더이상 사용되지 않는 객체들이 발생하는데, 그 객체들을 제거해주는 역할을 합니다.
추가 내용은 업데이트에 보충하도록 하겠습니다.
Runtime Data Area
이 영역은 JVM의 메모리 영역을 표현합니다.
각 영역에 대한 설명은 아래서 진행하도록 하겠습니다.
Method Area
업데이트 이후 보충하도록 하겠습니다.
Heap Area
Heap Area는 객체나 배열이 저장되는 영역입니다.
여기에 저장된 객체와 배열은 Stack Area
Updated by 20.09.24 자바 메모리 구조 (Java Memory Structure)
Site : @ThinkGround
Instagram : @thinkground_official
Facebook : @ThinkGround
Twitter : @ThinkG_Flature
Comments 1
Pingback: 일반적인 GC 내용과 G1GC (Garbage-First Garbage Collector) 내용 | ThinkGround