🔎 왜 가상 머신을 알아야 할까?
- 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해!!
👉 메모리 효율성을 위해 메모리 구조를 알아야함

프로그램 실행
JVM은 OS로부터 이 프로그램이 필요로 하는 메모리 할당
자바 컴파일러(javac)가 자바 소스 코드 (.java)를 읽어들여 자바 바이트 코드(.class)로 변환
Class Loader를 통해 class 파일들을 JVM으로 로딩
로딩된 class 파일들을 Execution Engine을 통해 해석
해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행

👉 Heap/Method → 모든 스레드 공유
👉 Stack/PC Register → 스레드별로 독립적
👉 이러한 실행과정 속에서 JVM은 필요에 따라 Thread Synchronization과 같은 GC같은 관리작업을 수행
🔎 전체적인 흐름
- Java는 Heap 영역에 참조 타입을 저장
- Young Generation 공간에서 새로 생성된 인스턴스 저장
- Minor GC가 일어남
- Old Generation 공간에서 Minor GC를 여러 번 거친 인스턴스들을 저장
- Major GC가 일어남