Java_Garbage_Collector

G1 TUNING
Shubham Modi(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 memory providing 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]
[6]
[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
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
child1
child2
child3
………
Child
5million

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
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
responsiveness with average
GC pause time as 0.010 sec
which is normally 0.1 sec
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
 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 Erez Petrank. "A generational onthe-y garbage collector for Java." ACM SIGPLAN Notices. Vol. 35. No. 5. ACM,
2000.

[ 2 ] www.cubrid.org/blog/dev-platform/understanding-java-garbagecollection

[ 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/G1GettingStart
ed/index.html

[ 7 ] github.com/chewiebug/GCViewer/blob/master/README