본문 바로가기

Programing/JVM(Java, Kotlin)

[후벼파는 자바] GC(가비지 컬렉션)

이 글을 읽기전에 괜찮은 글을 먼저 읽어보자. 하나는 영문이고 하나는 한글이다.

영어 - Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning: Java SE 6 HotSpot / Java 8
          Understanding Java Garbage Collection and What You Can Do About It: Gil Tene (링크)

한글 - Java Garbage Collection: 네이버개발자블로그 / Garbage Collection 모니터링 방법Garbage Collection 튜닝


OpenJDK를 받아보자. 여기는 openjdk-7u40-fcs-src-b43-26_aug_2013 기준이다.

openjdk/hotspot/src/share/vm/gc_interface 에 GC 인터페이스에 대한 코드가 있고

openjdk/hotspot/src/share/vm/gc_implementation 에 GC 구현체가 있었다.


[gc_interface]

gcCause.hpp에 보면 GC가 발생하는 종류에 대해 enum으로 선언하고 있다.

class GCCause : public AllStatic {

 public:

  enum Cause {

    /* public */

    _java_lang_system_gc,

    _full_gc_alot,

    _scavenge_alot,

    _allocation_profiler,

    _jvmti_force_gc,

    _gc_locker,

    _heap_inspection,

    _heap_dump,

    //...

이름을 보면 추정이 가능하다. 예) _java_lang_system_gc => java.lang.System.gc() 가 호출

GCCause 클래스 구현(gcCause.cpp)에 보면 GCCause::Cause 열거형을 문자열로 바꾸어주는 to_string 메서드가 구현되어 있다.

  GCCause::Cause 문자열
0 _java_lang_system_gc System.gc()
1 _full_gc_alot FullGCAlot
2 _scavenge_alot ScavengeAlot
3 _allocation_profiler Allocation Profiler
4 _jvmti_force_gc JvmtiEnv ForceGarbageCollection
5 _gc_locker GCLocker Initiated GC
6 _heap_inspection Heap Inspection Initiated GC
7 _heap_dump Heap Dump Initiated GC
8 _no_gc No GC
9 _allocation_failure Allocation Failure
10 _tenured_generation_full Tenured Generation Full
11 _permanent_generation_full Permanent Generation Full
12 _cms_generation_full CMS Generation Full
13 _cms_initial_mark CMS Initial Mark
14 _cms_final_remark CMS Final Remark
15 _cms_concurrent_mark CMS Concurrent Mark
16 _old_generation_expanded_on_last_scavenge Old Generation Expanded On Last Scavenge
17 _old_generation_too_full_to_scavenge Old Generation Too Full To Scavenge
18 _adaptive_size_policy Ergonomics
19 _g1_inc_collection_pause G1 Evacuation Pause
20 _g1_humongous_allocation G1 Humongous Allocation
21 _last_ditch_collection Last ditch collection


[gc_implementation]