00. 참고
01. Stack Area
스택 영역은 스택 자료구조 방식을 메모리에 적용시킨 것이라고 보면 된다.스택 자료구조란 LIFO라는 방식.
즉, Last In(마지막에 저장된 데이터를) First Out(제일 먼저 꺼낸다)으로 동작하는 자료구조를 의미한다.
통상적으로 스택에선 입력을 Push, 출력을 Pop이라고 부른다.
Stack 메모리에는 Stack Frame이라는 단위의 데이터가 Push/Pop 되는데, Stack Frame이란
단순하게 메서드가 호출될 때 생성된다고 이해해도 좋다.
최상단에 첨부한 이미지 자료를 보면 알 수 있겠지만, Stack Frame은 LVA(Local Variables Array)와
OS(Operand Stack), FD(Frame Data)로 구성된다.
LVA는 로컬 변수를 저장하는 배열로 컴파일 시점에 길이가 정해진다.
OS는 명령어의 중간 연산 결과를 일시적으로 저장하는 스택이고,
FD는 메서드와 관련된 그 외 정보이다.
Stack을 통해 알 수 있는 점 정리
1. 메서드의 매개변수도 별도의 메모리 공간을 가지는 변수이다.
ex) void main(String args[])라는 코드가 작성되면, args라는 변수가 메모리에 할당된다.
2. 메서드 내부의 로컬 변수의 수명 주기는 Stack Frame 단위이다.
3. Stack 메모리도 유한한 공간이기에 꽉 차면 Stack OverFlow가 발생한다.
02. Heap Area
인스턴스를 저장하는 공간으로, new 키워드로 생성되는 인스턴스나 문자열 상수가 해당 메모리 공간에 저장된다.
배열도 이 곳에 저장된다. 인스턴스의 주소값(참조값)을 참조형 변수들에게 저장 후 가져다 사용한다.
가비지 컬렉터(GC)가 참조되지 않는 인스턴스나 문자열 상수를 제거한다.
Heap을 통해 알 수 있는 점 정리
1. 인스턴스와 상수 문자열은 Heap 메모리에 저장된다.
2. Heap에 저장된 인스턴스는 Garbage Collector에 의해 수집된다.
03. Method Area
메소드 영역은 JVM이 실행될 때 생성된다. 이 영역은 JVM이 자바 코드를 실행하기 위한 중요한 정보들이 저장된다.
저장되는 정보로는 Run-time Constant Pool(실행환경 상수 풀), Symbolic Reference, Class 정보,
Field 정보(멤버 변수), 메서드 정보/정적 메서드 정보, Interface 정보, 생성자 정보, 정적 변수
Method Area를 통해 알 수 있는 점 정리
1. 자바 프로그램 실행을 위한 중요한 정보들이 저장된다.
2. 정적 변수도 Method Area에 저장된다. (클래스의 인스턴스 변수는 Heap)
3. 정수/실수 리터럴은 Method Area에서 정보를 관리한다.
04. Reference
- https://coderstea.in/post/java/get-ready-to-deep-dive-java-memory-management-structure-of-jvm/
'~2024.10' 카테고리의 다른 글
[네트워크] TCP와 UDP 그리고 연계되는 개념 (0) | 2024.04.06 |
---|---|
[Android 기초] EditText 개념과 사용 방법 (0) | 2024.04.02 |
[GPT4 답변 공유] 안드로이드 git ignore 사용법 (0) | 2024.03.31 |
[자바] 객체의 생성 과정(feat. 메모리 할당) (0) | 2024.03.31 |
[Android] 안드로이드 스튜디오에서 git을 통한 버전 관리 세팅 (0) | 2024.03.28 |