Garbage collector … an introduction Peter Varsanyi Confidential Agenda Basics Memory management Garbage collector Garbage collector types Java garbage collectors Confidential 2 Garbage Collector BASICS Confidential 3 GARBAGE COLLECTOR Basics What is it? • Find data objects in the program, that cannot be accessed in the future • Reclaim resources used by these objects Confidential 4 Basics Advantages? • Dangling pointer bugs • Double free bugs • Certain type of memory leaks Confidential 5 Basics Disadvantages • Extra computing resources • Unpredictable collection time • More memory-related work than useful work Confidential 6 Brief history Automatic garbage collector • First automatic garbage collection: LISP(1958) • Several other languages implemented it: – BASIC(1964) – Logo(1967) – Java 1.0(1996) Confidential 7 Garbage collector MEMORY MANAGEMENT Confidential 8 Memory management OS level process • 32 bit: 4GB address space • 64 bit: 16EB address space • Kernel space • User space 0 GB 0x0 2 GB 0x40000000 0x80000000 4 GB 0xC0000000 Confidential 0xFFFFFFFF 9 Memory management OS level process • OS + C runtime • JVM/Native heap • Java Heap (-Xmx2GB) 0 GB 2 GB OS + C runtime JVM NativeHeap 0x0 0x40000000 0x80000000 4 GB Java heap 0xC0000000 Confidential 0xFFFFFFFF 10 Memory management • Conservative collector – Any bit pattern can be a pointer – No compiler cooperation required • Precise collector – Require compiler cooperation – Can move objects • Commercial JVMs use precise collector Confidential 11 Memory management Reference types • Strong • Soft • Weak • Phantom Confidential 12 Memory management Confidential 13 Memory management Object Lifecycle Confidential 14 Garbage collector TYPES Confidential 15 Garbage collector Reference counting collector • An early garbage collection strategy • Reference count is maintained in the object • Overhead to increment/decrement reference count • Cannot clean cyclic references Confidential 16 Garbage collector types Tracing collector • Trace out the heap starting from roots • Two phases: – Mark live objects – Clean dead objects Confidential 17 Garbage collection Mark • Find objects in the heap • “Paint” them • Non-marked objects are dead • Work is linear to “live set” Confidential 18 Garbage collection Sweep • Scans heap for dead objects • Work is linear to heap size Confidential 19 Garbage collection Compact • Avoid fragmentation • Relocates objects • Remap: fix all references to live objects • End of heap is a large contagious free area • Work is linear to “live set” Confidential 20 Garbage collection Copy • Moves all objects • Single pass operation • Split memory into 2 region • Work is linear to “live set” Confidential 21 Java Garbage collectors Mark/Sweep (1.0) • Easy to implement • Reclaim cyclic structures Confidential 22 Java Garbage collectors • Generational collection (1.2) • Young/Eden generation • Tenured generation • Perm generation Confidential 23 Java Garbage collectors • Generational collection Confidential 24 Java Garbage collectors Separate collectors • Minor GC – When eden is full – Sweeps eden + current survivor • Major GC – When old is full – Perm + tenured collected Confidential 25 Java garbage collectors Tenured S1 S2 Eden Confidential 26 Java Garbage collectors Confidential 27 Java Garbage collectors Remembered set • Track references into young gen • Card marking Confidential 28 Java Garbage collectors Mark/Compact(1.3) • Combines copy & mark/sweep • Mark live objects, move these Confidential 29 Java Garbage collectors Concepts • Parallel • Uses multiple CPU to perform collection at the same time • Concurrent • Performs GC concurrently with application’s own execution • Safe point • Point in thread execution, where collector can identify all references in thread’s execution stack Confidential 30 Java Garbage collectors Serial GC • Default with 1 CPU • Young collector: Copy • Old collector: Mark/Sweep/Compact • Faster allocation Confidential 31 Java Garbage collectors Parallel GC • Multiple threads to collect young • More than 2 CPU pause time will be reduced • Old gen collected with parallel mark/sweep Confidential 32 Java Garbage collectors CMS(Concurrent Mark Sweep) • Multiple threads to collect young • Tenured generation: mark/sweep • Does not compact or copy • Low pause time • Occupancy fraction Confidential 33 Java garbage collectors CMS phases 1. Initial mark(STW) 2. Concurrent mark 3. Concurrent preclean 4. Remark(STW) 5. Concurrent sweep 6. Concurrent reset Confidential 34 Java garbage collectors CMS advantages/disadvantages • Advantages: – Low latency • Disadvantages – Cannot work when old is full – No compaction Confidential 35 Java Garbage collectors G1 to the rescue • Most empty region first • Estimate region clean time • User defined target time Confidential 36 Java Garbage collectors Confidential 37 Java Garbage collectors G1 to the rescue • Heap partitioned into equal size of chunks • More predictable GC pauses • High throughput • Compacting collector Confidential 38 Java Garbage collectors G1 phases 1. Initial mark(STW) 2. Root region scanning 3. Concurrent marking 4. Remark(STW)(SATB) 5. Clean up 6. Copy(STW) Confidential 39 Myths • Creating object has high cost • Do not create lots of small objects • No more memory leak(MAGIC!) • Increase the heap, what could happen? • Null everything you don’t use • System.gc() will collect everything immediately Confidential 40 Confidential 41 Tools • Jstat(Part of JDK) • Java VisualVM(Oracle JDK) – Visual GC plugin • -XX:+PrintGC • -XX:+PrintGCDetails Confidential 42 Useful links • http://cscircles.cemc.uwaterloo.ca/java_visu alize/ • http://www.oracle.com/webfolder/technetwo rk/tutorials/obe/java/gc01/index.html • http://www.cubrid.org/blog/devplatform/understanding-java-garbagecollection/ • http://www.slideshare.net/cnbailey/memoryefficient-java Confidential 43 Confidential 44 Q/A • Questions? • No I will not clean your room. Confidential 45