⌨️ JVM의 구조와 JAVA의 작동 방식에 대해 간략한 정리
1. JVM 구조(메모리 영역)

자바의 작동방식
자바 애플리케이션 실행에서 Java 컴파일러가 먼저 동작
->. java 파일을. class 파일로 컴파일 (컴파일타임)
JVM을 실행하며 런타임
-> Execution Engine이 필요한 클래스들을 Class Loader에 요청
-> Class Loader가 바이트코드의 .class 에서 가져와 메모리에 적재
-> Execution Engine이 메모리에 올라온 코드를 실행하면서 애플리케이션이 실행 (위 내용을 반복)
1.1. Class Loader
자바 애플리케이션이 실행되기 이전 Java 컴파일러가 Java 소스 파일을. class 파일로 컴파일 이후 필요한 코드 파일들을 메모리에 올려야 하는데 이 일을 담당
class 파일을 JVM이 운영체제로부터 할당받은 메모리 영역에 적재하는 역할을 한다
1.2. Execution Engine
Class Loader에 의해 메모리에 적재된 바이트 코드의 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할
*JIT Compiler : 컴파일방식+인터프리터방식
1.3. Garbage Collector
Heap 메모리 영역에 생성된 객체들 중에 참조되지 않은 객체들을 제거하는 역할
자세한 GC는 내용이 방대하므로 따로 포스팅
1.4. Runtime Data Area
JVM의 메모리 영역

- Method Area
클래스 수준의 정보를 저장
- 타입 정보
- 필드 정보 (필드 타입, 필드 수정자)
- 메서드 정보
- 런타임 상수 풀
- 클래스 변수
모든 JVM 스레드에 공유되는 공유자원
논리적으로는 Heap 영역 - Heap Area
인스턴스화 된 모든 클래스 인스턴스와 배열을 저장
모든 JVM 스레드에 공유되는 공유 자원
Heap에 저장된 할당 메모리 회수 권한은 무조건 가비지 컬렉터에 의해서만 회수 가능 - Stack Area
메서드가 호출될 때 메서드의 스택 프레임이 저장되는 영역
지역 변수와 매개 변수를 스택 영역에 저장 - PC Register
현재 수행 중인 JVM 명령 주소를 갖는다. CPU의 Program Counter와 같은 역할
CPU에 직접 Instruction을 수행하지 않고 Stack에서 Operand를 뽑아내 별도의 메모리 공간에 저장
이 공간을 PC register라고 함 - Native Method Stack
자바 외 언어로 작성된 코드를 위한 메모리 영역 보통 C/C++ 등의 코드를 수행하기 위한 스택
JNI를 통해 표준에 가까운 방식으로 구현 가능
🌟REFERENCE
Devkuma : https://www.devkuma.com/docs/jvm/memory-structure/
⌨️ JVM의 구조와 JAVA의 작동 방식에 대해 간략한 정리
1. JVM 구조(메모리 영역)

자바의 작동방식
자바 애플리케이션 실행에서 Java 컴파일러가 먼저 동작
->. java 파일을. class 파일로 컴파일 (컴파일타임)
JVM을 실행하며 런타임
-> Execution Engine이 필요한 클래스들을 Class Loader에 요청
-> Class Loader가 바이트코드의 .class 에서 가져와 메모리에 적재
-> Execution Engine이 메모리에 올라온 코드를 실행하면서 애플리케이션이 실행 (위 내용을 반복)
1.1. Class Loader
자바 애플리케이션이 실행되기 이전 Java 컴파일러가 Java 소스 파일을. class 파일로 컴파일 이후 필요한 코드 파일들을 메모리에 올려야 하는데 이 일을 담당
class 파일을 JVM이 운영체제로부터 할당받은 메모리 영역에 적재하는 역할을 한다
1.2. Execution Engine
Class Loader에 의해 메모리에 적재된 바이트 코드의 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할
*JIT Compiler : 컴파일방식+인터프리터방식
1.3. Garbage Collector
Heap 메모리 영역에 생성된 객체들 중에 참조되지 않은 객체들을 제거하는 역할
자세한 GC는 내용이 방대하므로 따로 포스팅
1.4. Runtime Data Area
JVM의 메모리 영역

- Method Area
클래스 수준의 정보를 저장
- 타입 정보
- 필드 정보 (필드 타입, 필드 수정자)
- 메서드 정보
- 런타임 상수 풀
- 클래스 변수
모든 JVM 스레드에 공유되는 공유자원
논리적으로는 Heap 영역 - Heap Area
인스턴스화 된 모든 클래스 인스턴스와 배열을 저장
모든 JVM 스레드에 공유되는 공유 자원
Heap에 저장된 할당 메모리 회수 권한은 무조건 가비지 컬렉터에 의해서만 회수 가능 - Stack Area
메서드가 호출될 때 메서드의 스택 프레임이 저장되는 영역
지역 변수와 매개 변수를 스택 영역에 저장 - PC Register
현재 수행 중인 JVM 명령 주소를 갖는다. CPU의 Program Counter와 같은 역할
CPU에 직접 Instruction을 수행하지 않고 Stack에서 Operand를 뽑아내 별도의 메모리 공간에 저장
이 공간을 PC register라고 함 - Native Method Stack
자바 외 언어로 작성된 코드를 위한 메모리 영역 보통 C/C++ 등의 코드를 수행하기 위한 스택
JNI를 통해 표준에 가까운 방식으로 구현 가능
🌟REFERENCE
Devkuma : https://www.devkuma.com/docs/jvm/memory-structure/