[Java]Reference type의 데이터 저장 방식

Tabasco·2022년 10월 12일

BootCamp

목록 보기
6/7

Java의 데이터 타입

1. Primitive type

Primitive type은 기본 자료형이라고도 부르며, 다음과 같은 자료형들을 지칭한다.

정수형 : byte, short, int, long
실수형 : float, double
문자형 : char
논리형 : boolean

이러한 기본 자료형은 모두 메모리의 stack영역에 값을 저장한다. 또한 해당 자료형들은 모두 변수 선언 시 메모리 크기가 고정되어 있다.

2. Reference type

Reference type은 문자열, 배열, 클래스 등 객체의 주소를 저장하여 관리하는 타입이다.

이러한 타입들은 정해진 크기가 없기 때문에 Stack영역에서 관리하기에 어려움이 있다. 따라서 Stack영역에는 해당 타입들의 memory 주소값을 저장하고, 값을 불러올 때는 해당 주소에 있는 데이터를 가져오는데 이 데이터들은 Heap영역에서 관리된다.

Reference type의 경우에

String str = new String();

이라는 코드를 작성했다면 str이라는 이름의 메모리 공간이 스택 영역에 생성되고 생성된 str의 인스턴스는 Heap 영역에 생성된다.

Heap영역에서 Garbage Collection의 역할

Reference type의 경우 Heap 영역에 값을 저장하고 있고, 해당 인스턴스의 주소만 Stack 영역에 저장하고 있다. 따라서 값을 사용하지 않을 때는 굳이 Heap영역의 메모리를 잡아두고 있을 필요가 없다. C, C++의 경우에는 Heap영역의 메모리를 개발자가 직접 할당 할 수 있기 때문에 삭제 역시 free()를 통해 제거해줄 수 있지만, 자바의 경우 Heap영역의 메모리를 개발자가 컨트롤 할 수 없다.

따라서 Garbage Collection이 자체적인 주기에 따라 사용하지 않는 Heap영역의 메모리를 제거해주는데, Stack에서 바라보고 있는 주소 역시 이때 사라지게 된다.

Garbage Collector의 정확한 동작방식은 다음에 더 알아보도록 하자.

profile
내가 보려고 적는 블로그

0개의 댓글