자바 메모리 구조
- 메서드 영역 : 프로그램을 실행하는데 필요한 공통 데이터를 관리. 이 영역은 프로그램의 모든 영역에서 공유
- 클래스 정보 : 클래스의 실행 코드, 필드, 메서드, 생성자 등 모든 실행 코드가 존재
- 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 |