이 글을 읽기전에 괜찮은 글을 먼저 읽어보자. 하나는 영문이고 하나는 한글이다.
영어 - 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]
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
후벼파는 스프링 - @RequestMapping의 원리 (0) | 2015.02.02 |
---|---|
[면접 문제] 1로 설정된 비트의 수를 반환하는 함수 작성 (0) | 2015.01.22 |
Gradle Project 사용해보기 (0) | 2015.01.12 |
[Java] 배열 최대 할당 가능 크기? (0) | 2015.01.07 |
[MVC] 파일 업로드 (0) | 2015.01.05 |