주제목차내용🔎 JVM🐻 Class Loader💫 Execution Engine인터프리터JIT(Just-In-Time Compiler)❓ 그래서 어떤걸 쓰는데 ?🛒 Garbage Collector(GC)🤖 Runtime Data Area1. Method Area🔎 Runtime Constant Pool2. HEAP3. JVM Language Stacks4. PC Resgisters5. Native Method StacksReference
주제
자바 메모리 영역, 자바는 Call By Value일까, Call By Reference 일까?
목차
- 전반적인 자바의 메모리 할당 및 실행 과정
- 각 메모리 영역 역할
- call by value 메모리 할당 그림까지 꼭 그리기 [Java] Java는 Call by reference가 없다
내용
🔎 JVM

- 자바 바이트코드를 실행할 수 있는 주체
- 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현된다.
- 운영체제와 플랫폼에 독립적으로 실행 가능하게 해준다.
🐻 Class Loader
- 자바에서 소스를 작성하면(.java) 자바 컴파일러가 컴파일을 하여 바이트 코드로(.class) 변환시킴
- 클래스 파일들을 Runtime Data Area로 로드하고 배치하는 역할 -> runtime에 작업을 수행함 !
💫 Execution Engine
- 클래스 로더를 통해 JVM 내의 Runtime Dat Area에 배치된 바이트 코드를 명령어 단위로 읽어서 실행
인터프리터
- 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행하여 개별 해석이 빠름
- 전체적인 실행 속도는 느리다.
- 초기 JVM 안에서 바이트 코드는 기본적으로 인터프리터 방식으로 동작
JIT(Just-In-Time Compiler)
- 인터프리터의 단점을 보완하기 위한 방식
- 프로그램을 실제 실행하는 시점에 각 OS에 맞는 Native Code로 변환하여 실행 속도를 개선
❓ 그래서 어떤걸 쓰는데 ?
- 바이트 코드를 Native Code로 변환하는데 비용이 소모되어 모든 코드를 JIT 방식을 사용하지 않고, 인터프리터 방식을 사용하다 일정 기준이 넘어가면 JIT 컴파일 방식으로 명령어를 실행한다.
- 반복 수행이 발생하지 않으면 interpreter 방식이 빠름 ! -> Loop 문에서 ByteCode를 반복 수행한다.
🛒 Garbage Collector(GC)
- JVM의 자동화된 메모리 관리 기능
- Application이 생성한 객체의 생존 여부를 판단해서 더 이상 사용되지 않는 객체를 해제함으로써 메모리 관리가 자동화 되도록함
🤖 Runtime Data Area

1. Method Area
- 클래스의 필드 정보와 메소드 정보, Type 정보, Constant Pool, static 변수, final class 변수 등을 분류해서 저장
- 클래스가 로딩될 때 생성
- 모든 스레드에서 공유
🔎 Runtime Constant Pool
- Method Area 영역에 포함되지만 독자적인 중요성이 있다.
- 클래스, 인터페이스, 메소드, 필드에 대한 모든 레퍼런스를 저장
- JVM은 이를 통해 해당 메소드나 필드의 실제 메모리상 주소를 찾아 참조한다.
2. HEAP
- 인스턴스 또는 객체를 저장하는 공간
- 런타임 시 동적으로 할당하여 사용하는 영역
- GC의 대상으로 객체가 더이상 사용되지 않거나 명시적 NULL 선언시 GC !
- 모든 스레드에서 공유
3. JVM Language Stacks
- 스택 프레임이라는 구조체를 저장하는 스택
- 연산 중 발생하는 임시 데이터 저장
- 스레드가 시작될 때 생성되며 **스레드마다 하나씩 존재 **
4. PC Resgisters
- 현재 수행 중인 명령의 주소를 가진다.
- 연산 견과 값을 메모리에 전달하기 전 저장하는 CPU 내의 기억 장치
- 스레드가 시작될 때 생성되며 **스레드마다 하나씩 존재 **
5. Native Method Stacks
- JAVA 외의 언어로 작성된** 네이티브 코드를 위한 스택**
- Java Native Interface를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택
- 언어에 맞게 스택이 생성된다.