[JAVA] 자바 메모리 구조
✅ 아래는 자바 메모리 구조를 이해하기 위한 예제 코드이다. 김영한님의 실전 자바에 나오는 예제 코드와 동일하다.
public class Data {
private int value;
public Data(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public class JavaMemoryEx {
public static void main(String[] args) {
System.out.println("main 시작");
method1();
System.out.println("main 종료");
}
static void method1() {
System.out.println("method1 시작");
Data data1 = new Data(10);
System.out.println("method1 종료");
}
}
◾ 메서드 영역(Method Area)
- 프로그램 실행시 필요한 공통 데이터 관리 : 클래스 정보, 스태틱 변수 관리
- JVM 하나당 하나의 메서드 영역이 생성됨
- 메서드 영역은 모든 스레드에서 공유됨
◾ 스택 영역(Stack Area)
- 스레드별로 각각의 스택을 가지고 있음
- 지역변수, 중간 연산 결과, 메서드 호출 정보 등 포함
- 메서드 호출시 스택 프레임이 쌓이고, 해당 스택 프레임은 메서드 종료시 제거됨
◾ 힙 영역(Heap Area)
- 스택 영역의 메서드가 실행되면 힙 영역에 인스턴스를 생성함
- 위의 예시에서 스택 영역의 x001 참조값을 data1에 보관하고, x001 인스턴스를 참조한다.
- method1() 종료시 method1() 스택 프레임이 제거되며, 지역변수 data1도 함께 제거된다.
- 더이상 참조되지 않는 객체는 GC(가비지 컬렉션)에 의해 제거된다
📌 참고한 사이트
https://coderstea.in/post/java/get-ready-to-deep-dive-java-memory-management-structure-of-jvm/
Get Ready to Deep Dive in Java Memory Management: Structure of JVM Memory - CodersTea
Memory management is the process of allocation and de-allocation of objects from memory, it's done automatically with the help of garbage collectors.
coderstea.in
📌 참고한 도서 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해
https://product.kyobobook.co.kr/detail/S000001628116
스프링 입문을 위한 자바 객체 지향의 원리와 이해 | 김종민 - 교보문고
스프링 입문을 위한 자바 객체 지향의 원리와 이해 | 이 책은 자바에서 스프링으로 나아가기 위한 연결 고리를 제공한다.
product.kyobobook.co.kr