JVM이 사용하는 메모리 영역은 Heap Area, Stack Area, Method Area, PC Register, Native Method Stack로 5가지가 있다
객체가 저장되는 공간
특징
1. 모든 객체(instance)와 배열이 저장됨
2. GC가 관리하며, 더 이상 참조되지 않는 객체는 자동으로 제거됨
3. new 키워드를 사용하여 생성한 객체들이 저장됨
구조
예제
class Person {
String name; // name 변수는 Heap 영역의 객체를 참조
}
Person p1 = new Person(); // Person 객체는 Heap에 생성
각 스레드마다 생성되며, 지역 변수와 메서드 실행 정보를 저장
void methodA() {
int x = 10; // x는 Stack에 저장
methodB();
}
void methodB() {
int y = 20; // y는 Stack에 저장.
}
methodA();
클래스의 정보(메타데이터), static 변수, 상수, 메서드 코드가 저장되는 공간
class Sample {
static int staticVar = 100; // Method Area에 저장됨
final int constantVar = 10; // 상수 풀(Constant Pool)에 저장됨
}
현재 실행 중인 명령어의 주소를 저장하는 공간
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a + b; // 이 코드가 실행될 때 PC Register에는 해당 명령어의 주소가 저장
}
Java가 아닌 네이티브 코드(C, C++ 등)를 실행하는 공간
public class NativeExample {
public native void nativeMethod(); // 네이티브 메서드 선언
static {
System.loadLibrary("nativeLib"); // 네이티브 라이브러리 로드
}
}
https://tecoble.techcourse.co.kr/post/2021-08-09-jvm-memory/
https://velog.io/@impala/JAVA-JVM-Runtime-Data-Area
https://jithub.tistory.com/40
https://velog.io/@ddangle/Java-%EB%9F%B0%ED%83%80%EC%9E%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%98%81%EC%97%ADRuntime-Data-Area%EC%97%90-%EB%8C%80%ED%95%B4