170 likes | 314 Views
G1 TUNING. Shubham Modi ( 10327729 ) Ujjwal Kumar Singh(10772) Vaibhav (10780). Motivation.
E N D
G1 TUNING ShubhamModi(10327729) Ujjwal Kumar Singh(10772) Vaibhav(10780)
Motivation • There is memory sensitive application which is running and now a new object has to be created. Suppose that the memory heap has insufficient space for the newly created objects. Such conditions would trigger a full garbage collection cycle, which will perform compaction of the heap. • With CMS GC, the full collection is serial and STW, hence your application threads are stopped for the entire duration while the heap space is reclaimed and then compacted. • This affects the performance of the application and will decrease the responsiveness and throughput.
G1 Garbage Collector • G1 is a compacting collector i.e. it compacts sufficiently to completely avoid the use of fine-grained free lists for allocation, and instead relies on regions. • The heap is partitioned into a set of equal-sized heap regions, each a contiguous range of virtual memoryproviding greater flexibility in memory usage. [6]
How G1 works? • Heap is split into many fixed size region ranging from 1 to 32 Mb [6]
Regions are mapped into Eden, Survivor and Old generation [6] • This is a STW pause. Eden and Survivor size is calculated for the next GC. GC Pause time is taken into consideration. [6]
Live objects have been evacuated to survivor regions or to old generation regions [6] • Liveness of regions is calculated and empty regions are marked X and are deleted in remark phase [6]
After calculating liveness of regions G1 selects the region with least liveness and collects it. Both young and old generation are collected at the same time. • After it we get compacted dark blue and dark green regions [6] [6]
Why G1? • Provide predictable GC pause duration • Decrease frequency of Stop The World(Full GC Cycle) • Compact free space without lengthy GC induced pause times • Do not require much larger Java heap space • Do not sacrifices throughput of application • Compaction mostly eliminating the fragmentation issues
Objectives • Improves responsiveness • Increase throughput
Problem root • When we try to create 10 million children of root, it gives OutofHeap Error • We created first tree with root and 5 million children occupying ~ 55% of heap space • Then we made child1 as root of tree • Therefore all other nodes becomes unreachable • Then we created another tree with a root and its 5 million children • Hence Garbage collector is called to free the space causing Stop The World event to occur child1 child3 child2 Child 5million ………
Factors affecting G1 Performance • GC Pause Time: Set the target for the maximum GC pause time(soft goal) • Heap Occupancy: Percentage of the entire heap occupancy to start the concurrent GC cycle(Default 45) • Old Generation size: New to Old Generation size ratio(Default 2) • Heap region size: Size of the single region of uniformly divided space(Min 1 and Max 32Mb)
Results Here we achieved high throughput 35% which is normally 25-27% in other cases. As shown in this case we skipped Stop The World event Here we achieved high responsiveness with average GC pause time as 0.010 sec which is normally 0.1 sec • Grey region shows concurrent GC pauses of an application • Dark grey region shows Stop The World event
Tools used • Eclipse for generating Tree • GCViewer to get plots and other details of G1 performance like throughput etc.
References • [ 1 ] Domani, Tamar, Elliot K. Kolodner, and ErezPetrank. "A generational on-the-y garbage collector for Java." ACM SIGPLAN Notices. Vol. 35. No. 5. ACM, 2000. • [ 2 ] www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection • [ 3 ] www.ibm.com/developerworks/library/j-leaks • [ 4 ] www.cubrid.org/blog/textyle/428187 • [ 5 ] www.infoq.com/articles/JavaGarbageCollectionDistilled • [ 6 ] www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html • [ 7 ] github.com/chewiebug/GCViewer/blob/master/README