티스토리 뷰

기타

Memory Analyzer - Unreachable object 분석하기

Better than alone 2021. 11. 15. 15:23

Java Garbage Collector는 어떤 객체에 유효한 참조가 있다면 'reachable', 없으면 'unreachable' 로 구별한다.

따라서 참조가 없는 unreachable object에 대해서 GC를 수행함. 

 

보통, Memory leak이 발생하는 경우에는 문제가 되는 객체에 대한 참조가 살아 있기 때문에 dump를 뜬 후, Memory Analyzer로 확인이 가능하다. (이 경우 reachable object에 대한 확인 필요)

 

하지만, 비정상적으로 Minor GC가 잦게 발생한다면, GC 대상이 되는 unreachable object에 대한 확인이 필요하다. 

 

이 역시 Memory Analyzer로 확인이 가능하다.

 

(정상적으로 GC가 발생하는 경우 어떤 객체가 GC 대상인지는 알 필요가 없기 때문에, 이 기능이 default로는 비활성화 되어 있다.)

 

이클립스 Memory Analyzer를 사용하는 경우 아래 옵션을 활성화 해줘야한다. 

 

 

unreachable object 확인하기

  1. Close the snapshot
  2. Select the heap dump using Window > Heap Dump History right-click, Delete Index Files
  3. Select 'Keep unreachable objects' using Window > Preferences > Memory Analyzer
  4. Reopen the heap dump, which will reparse the heap dump.
  5. Select the Java Basics > GC Roots query.
  6. Select the 'Unreachable Objects' row.
  7. Run the 'Show Retained Set' query on that row.

 

참고:  https://help.eclipse.org/2020-12/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Freference%2Finspections%2Funreachable_objects.html&cp%3D61_4_0_8

반응형
댓글