java | January 08, 2022
Java에서 객체가 만들어지면 Heap이라는 메모리 공간에 저장된다.
객체를 만들면, 자바에서는 그 객체의 크기에 따라 heap 안에 적당한 메모리 공간을 할당한다.
JVM에서 어떤 객체가 절대로 다시 쓰이지 않을 것이라는 결론을 내릴 수 있으면 그 객체는 garbage collection 대상이 된다.
더이상 필요하지 않은 객체들은 삭제되고, 그 객체들에 할당되었던 메모리를 되찾아온다.
GC는 개발자가 메모리 할당 해제를 수동으로 처리하지 않아도 되게 한다.
결과적으로 메모리 문제들과 관련된 몇몇 버그들이 GC에 의해 제거되거나 크게 감소한다.
Young Generation 영역: 새롭게 생성한 객체의 대부분이 여기에 저장된다.
금방 unreachable한 상태가 되기 때문에, 매우 많은 객체가 이 영역에서 생성되었다가 사라진다.
Old Generation 영역: Minor GC (Young generation)에서 살아남은 객체들이 여기로 복사된다.
대부분 Young 영역보다 크게 할당하며, 크기가 큰 만큼 young generation 보다 GC가 적게 발생한다.
Permanent Generation 영역: 프로그램에서 사용되는 class와 method를 설명하기 위해 JVM이 필요로하는 metadata가 포함된다. (런타임 시에 JVM에 의해 채워진다.)
Old 영역에서 살아남은 객체가 영원히 남아있는 곳이 아니다.
이 영역에서도 GC가 발생할 수 있는데, 이곳의 GC도 Major GC에 포함된다.
What is Garbage Collection in Java and Why is it Important?
Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리