질문 내용은 이 페이지(링크)를 참조했습니다.
✅ JVM 이란?
자바 프로그램 실행환경을 만들어 주는 소프트 웨어.
자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있다.
JVM을 사용하면 하나의 바이트 코드로 모든 플랫폼에서 동작하도록 할 수 있다.
※ Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적이다.
리눅스의 JVM과 윈도우의 JVM은 서로 다르다. 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다.
✅ JVM 메모리 구조
프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리(Runtime Data Area)를 할당받고, JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

모든 스레드가 공유해서 사용 ( GC의 대상 ) - 힙 / 메서드
스레드마다 하나씩 생성 - 스택/PC레지스터/네이티브 메서드 스택

메서드 (스태틱) 영역
힙 영역
new 키워드로 생성된 참조형 데이터 타입을 갖는 객체(인스턴스), 배열 등이 저장 되는 공간
Heap 영역에 있는 오브젝트들을 가리키는 참조 변수는 stack에 적재

힙 영역에 보관되는 메모리는 Stack 영역과 다르게 메모리 호출이 끝나도 사라지지 않고 유지된다. ( 단, GC에 의해 삭제 or JVM이 종료 시 삭제됨. )
힙 메모리가 가득차면 java.lang.OutOfMemoryError : Java Heap Space 에러를 발생
주기적으로 GC가 제거하는 영역, 효율적인 GC를 위해 크게 3가지의 영역으로 나눈다.

| Generation | 설명 | GC |
|---|---|---|
| Young | Heap 영역에 객체가 생성되면 최초로 Eden 영역에 할당됨. 그 후 데이터가 어느정도 쌓이면, 참조정도에 따라 survivor의 빈공간으로 이동하거나 회수됨. (Minor GC) | Minor |
| Tenured | 위 단계에서 또 참조정도에 따라 이동되게 되는 공간. 이 영역에서 데이터 허용치가 초과되면, 이 영역에 있는 모든 객체를 검사하여 한꺼번에 삭제한다. | Major |
| Permanent | = Merhod Area, java8 부터는 사라지고, 이 영역에 저장되던 데이터들은 heap, metaspace 영역으로 이동되었다. | X |
스택영역
지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역
프로그램 실행 과정에서 임시로 할당되고, 끝나면 소멸되는 것들이 저장된다. - 생명주기가 매우 짧음.
기본타입 변수들(int, double 등)이 실제 값과 함께 저장
스택 메모리가 가득차면 자바에서는 java.lang.StackOverFlowError를 발생.
https://tv.kakao.com/v/426964287 - 코드 실행 상황 별 메모리 적재 상황 동영상
1. JVM은 OS로부터 메모리를 할당한다.
2. 자바 컴파일러가 자바 소스코드를 자바 바이트코드로 컴파일한다
--- 이 바이트코드 파일을 실행 하는 순간 JVM이 동작된다. ----
3. Class Loader를 통해 JVM Runtime Data Area로 로딩한다.
자바는 동적으로 클래스를 읽어오는데, 이때 동적으로 클래스를 로딩해주는 역할을 클래스 로더가 한다.
.class(바이트)파일을 묶어서 운영체제로부터 할당 받은 메모리(JVM Runtime Data Area)의 Method Area에 적재한다.
4. Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석한다.
5. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어진다.
✅ JVM 메모리구조 + 동작방식

출처
[Java] 자바 JVM 내부 구조와 메모리 구조에 대하여 (tistory.com)
[Java] 메모리 구조 메소드(Method), 스택(Stack), 힙(Heap) 영역에 대하여 (tistory.com)
JAVA :: 자바 메모리 구조 - 2. 힙 영역(Heap Area)과 스택 영역(Stack Area) 비교 (wanzargen.me)
☕ 그림으로 보는 자바 코드의 메모리 영역(스택 & 힙) (tistory.com)
☕ JVM 내부 구조 & 메모리 영역 💯 총정리 (tistory.com)
JVM 내부 동작 원리 & 자바 컴파일,실행 순서 - 런타임 영역, JIT 컴파일러, 인터프리터 (tistory.com)
Chat GPT