본문 바로가기
Java/Basic

메모리 구조

by o3oppp 2024. 12. 8.
자바 메모리 구조

메모리 구조(ref.인프런)

  • 메서드 영역 : 프로그램을 실행하는데 필요한 공통 데이터를 관리. 이 영역은 프로그램의 모든 영역에서 공유
    • 클래스 정보 : 클래스의 실행 코드, 필드, 메서드, 생성자 등 모든 실행 코드가 존재
    • static 영역 : static 변수들을 보관
    • 런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관
    • 메서드는 공통된 코드를 공유하므로 객체 생성 시 메서드에 대한 새로운 메모리 할당은 없음
  • 스택 영역 : 자바 실행 시 하나의 실행 스택이 생성. 각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함
    • 스택 프레임 : 스택 영역에 쌓이는 네모 박스가 하나의 스택 프레임
    • 각 쓰레드별로 하나의 실행 스택이 생성
  • 힙 영역 : 객체(인스턴스)와 배열이 생성되는 영역. 가바지 컬렉션(GC)이 이루어지는 주요 영역이며, 더 이상 참조되지 않는 객체는 GC에 의해 제거됨

스택 영역

1. 메서드 실행 시

  • 처음 자바 프로그램 실행 시 main()을 위한 스택 프레임이 하나 생성
  • main()에서 method1()을 호출하여 method1()을 위한 스택 프레임이 생성
  • method1()에서 method2()를 호출하여 method2()를 위한 스택 프레임이 생성

2. 메서드 종료 시

  • method2()가 종료되고 method2()스택 프레임이 제거된 후 method1()에서 method2()를 호출한 지점으로 돌아감
  • method1()이 종료되고 method1() 스택 프레임이 제거된 후 main()에서 method1()을 호출한 지점으로 돌아감
  • main()이 종료되고 더 이상 호출할 메서드가 없으므로 스택 프레임도 완전히 비워짐. 이때 프로그램을 정리하고 종료

스택 영역과 힙 영역

  • 처음 자바 프로그램 실행 시 main()을 위한 스택 프레임이 하나 생성

  • main()에서 method1()을 실행하여 method1() 스택 프레임이 생성됨
  • method1()은 지역 변수로 Data data1을 가지고 있으며 이 지역 변수도 스택 프레임에 포함
  • method1()은 new Data(10)를 사용하여 힙 영역에 Data 인스턴스를 생성하며 참조값을 data1에 보관

  • method1()은 method2()를 호출하면서 Data data2 매개변수를 x001 참조값을 넘김
  • 이제 method1()에 있는 data1과 method2()에 있는 data2 지역 변수는 둘 다 같은 x001 인스턴스를 참조

  • method2()가 종료되고 method2()의 스택 프레임이 제거되면서 매개변수 data2도 함께 제거됨

  • method1()가 종료되고 method1()의 스택 프레임이 제거되면서 매개변수 data1도 함께 제거됨

  • 이제 x001 참조값을 가진 Data 인스턴스를 참조하는 곳은 없으며 사용되는 곳도 없음
  • 프로그램에서 더는 사용하지 않는 객체는 메모리만 차지하게 되므로 GC(가비지 컬렉션)은 이렇게 참조가 모두 사라진 인스턴스를 찾아서 메모리에서 제거

'Java > Basic' 카테고리의 다른 글

다형성과 메서드 오버라이딩  (0) 2024.12.31
instanceof  (0) 2024.12.31
다형성과 캐스팅  (0) 2024.12.30
상속  (0) 2024.12.12
static  (1) 2024.12.08