코드 그라데이션
참조형 본문
메모리의 종류
[정적 영역]
: 자바 프로그램을 구성하는 기본 단위인 클래스가 로드되는 곳
- 프로그램이 시작될 때는 물론이고 실행 중에도 필요한 클래스를 이 영역에 읽어들인다.
- 모든 객체가 공유하는 정적 필드와 클래스의 동작을 정의하는 메서드 본체를 이 영역에 저장.
[스택]
: 메서드 실행에 필요한 정보를 저장하며 스레드별로 하나씩 생성됨. 메서드를 호출할 때 스택 프레임이 생성.
실행 중에 사용하는 정보(복귀 번지, 인수, 지역변수 등)를 저장.
=> 프로그램은 main에서 실행을 시작하며 메서드를 호출할 때마다 스택 위쪽으로 프레임이 계속 쌓인다.
설명) main에서 method1(12)를 호출하면 스택에 스택 프레임이 생성된다.
실행을 마치고 복귀할 번지와 호출원에서 전달한 인수값, 메서드 내부에서 선언한 지역변수가 생성되며,
메서드는 실행 중에 이 정보를 사용한다. method1에서 또 다른 메서드를 호출하면, 스택의 위쪽에 스택 프레임을 또
생성하여 해당 메서드의 정보를 저장한다.
method2가 실행을 마치면 스택에 저장해둔 복귀 번지를 찾아 method1로 리턴하며,
method1도 똑같은 방법으로 main으로 리턴한다.
스택에 생성하는 인수나 지역변수 등은 메서드가 실행 중일 때만 유효하고
리턴하면 더 이상 필요치 않아 모두 사라진다.
[힙(Heap)]
: 큰 객체를 생성하는 영역.
스택은 실행 정보를 저장하는 곳이고, 크기가 1M으로 제한적이어서 대용량의 객체를 저장하기에는 한계가 있다.
그래서 힙이라는 별도의 영역에 객체를 생성하고 스택에는 참조값만 저장한다.
int[ ] ar = new int[1000] 선언 시 스택과 힙에 변수 및 메모리가 할당된다.
힙이라는 더 넓은 메모리 영역에 객체를 생성하고 그 시작 위치만 참조 변수에게 알려준다.
배열의 실제 알맹이는 힙에 있고, 스택의 ar 변수는 시작 위치만 알고 있다.
이후 ar을 통해 힙의 배열 요소를 자유롭게 읽을 수 있다.
스택은 실행 정보를 저장하는 영역이고, 힙은 대용량 객체를 저장하는 영역으로 용도가 다르다.
+ 사용이 끝난 객체는 가비지 컬랙터가 주기적으로 회수하므로 해제를 할 필요가 없다. 할당해서 쓰고, 그냥 내버려 두면 된다.
기본형과 참조형
By. 자바 정복
'Java > 개념 정리' 카테고리의 다른 글
[보충] 전위 연산자와 후위 연산자 (0) | 2023.03.20 |
---|---|
try-catch 이론 (0) | 2023.02.25 |
조건문과 반복문 (0) | 2023.01.13 |
배열 (1) | 2023.01.13 |
연산자 우선순위 (0) | 2023.01.13 |