코딩하는 코커두드/JAVA

[JAVA] 자바 메모리 구조

코커두드 2024. 5. 26. 09:54

 

✅  아래는 자바 메모리 구조를 이해하기 위한 예제 코드이다. 김영한님의 실전 자바에 나오는 예제 코드와 동일하다.

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