자바의 Heap 메모리
자바의 메모리 관리가 어떻게 이루어지는지 알아보자.
자바는 Stack
과 Heap
자료구조를 활용하여 메모리 관리를 한다. Stack에는 데이터를 참조하기 위한 값들이 저장된다. Heap에는 Array, Object와 같은 값이 저장된다. 아래의 그림을 보면 이해하기 편하다.
Stack에는 참조값을 저장하여 Heap에 있는 실체값(?)을 가져오는 방식은 아래와 같은 장단점이 있다.
- 장점 : Heap 메모리는 동적으로 사용할 수 있으므로 값을 추가하거나 삭제하는 수정작업이 편하다.
- 단점 : 사용하지 않을 때, 사용하지 않는 메모리를 일일이 찾아서 해제시켜주어야 한다.
실제 코딩을 하다보면 아래와 같은 에러 메시지를 만날 때가 있는데, 이는 Object를 너무 많이 생성해놓고 메모리 해제를 하지 않아 heap 메모리가 꽉 찼다는 의미이다.
[Error] java.lang.OutOfMemoryError: Java heap space
이 때문에 자바에서는 객체나 배열을 생성할 때 메모리 관리를 잘 할 수 있도록 코드를 작성해야 한다.
위와 같은 메모리를 해제하는 역할을 하는 것이 바로 GC (Garbage Collector) 이다.