Java heap management 자바의 메모리 관리는 garbage collection 의 효율성을 높이기 위해 존재한다. 자바의 특징 중 하나는 JVM이 자동으로 메모리 관리를 하는 것이다. 정확히 말하자면 메모리 해제만을 자동으로 한다. 그리고 이 기능을 garbage collection이라고 한다. Fig 1. Layer of heap 그림 1에서 볼 수 있듯이, heap 메모리 영역은 Eden 과 Tenured 로 크게 2 영역으로 나눠진다. Eden Eden은 자유영역 정도로 볼 수 있다. Object의 생성/소멸이 자유롭게 또는 빈번하게 이뤄지는 영역이라는 뜻으로 볼 수 있다. Tenured Tenured는 종신 영역이라 번역할 수 있는데, object가 이곳에 들어가면 빠져 나올 수 없다고 이해하는 것이 쉽다. 실제로 이런 이름이 어울리는 이유는 생성/소멸의 빈도에 따라 object의 위치를 바꾸기 때문이다. Fig 2. Heap에서의 object 이동 그림2를 보면 heap 에서의 object의 이동을 원리를 알 수 있다. Minor GC(=Young GC) Eden 영역에 "new" 연산자에 의해 Object가 생성된다. 설정된 비율 이상의 객체가 Eden에 할당된다. Eden +From Space( S0 )에서 Minor GC (소규모 객체 해제, Young GC라고도 한다.)가 일어난다. 객체 중 참조(reference)가 없는 객체는 메모리 해제시킨다. 객체 중 참조가 남은 메모리는 To Space( S1 )으로 보낸다. 설정된 비율 이상의 객체가 Eden에 할당된다. Eden +From Space( S1 )에서 Minor GC (소규모 객체 해제, Young GC라고도 한다.)가 일어난다. 객체 중 참조(reference)가 없는 객체는 메모리 해제시킨다. 객체 중 참조가 남은 메모리는 From Space( S0 )으로 보낸...