use heap spaces – Generational, Regioning – Skip this topic for time reason • Stop The World(STW) – World == Application – Application cannot do nothing while in STW
– JVM pause time(STW) by GC Worst response time ⇒ Worst – Response time Service ⇒ Worst • We use HBase for persistent store in LINE Messaging – So, Response time of HBase is important
Counting reference – Mark • Collecting – Sweep/Compaction • Remove and defrag – Copy(Relocate) • Move live objects to another space • Do either while or after marking
Sequential/Parallel Copy Old GC Sequential/Parallel Sweep&Compact Concurrent Mark & Sweep (To be removed) Sweep only (No compaction) G1GC Copy ZGC(Java11, Experimental) Copy Shenandoah(Java12, Experimental) Copy
as Concurrent GC, however • Need to stop application(STW) while GC for – Soundness(Must):Never collect living object – Completeness(Option):Collect all garbage • STW duration depends on algorithm – How long, often – Scaling factor(Heap size? # of live objects? # of threads?)
Collect Old GC Sequential Parallel CMS(To be removed) Full GC somewhen G1GC Scales by heap size, live objects, etc, but manageable STW because address can be changed ZGC Scales by # of Threads STW:<=10ms? Shenandoah STW:<=10ms? Running application(e.g. Concurrent) STW GC cycles
two – Changing object address/pointer while running GC and application • Check official slides for more details – https://wiki.openjdk.java.net/display/zgc/Main
throughput – We may scale out(Need money though) • Want large heap for caching data • Don’t use CPU so much by HBase itself – Don’t use Phoenix(SQL for HBase) – Some compaction uses CPU core fully, but # of thread is small – Mostly IO and Networks • Server specs – 40 CPU cores – 256GB RAM
Running it on Java11-ea – We used HBase built by JDK8 • Enable ZGC • Eval performance using YCSB, a benchmark tool – STW duration and slow response of HBase – Throughput – As contrast, G1GC
Experimental – Choose it understanding properties of GC, your app and HW • We like ZGC – Shows better performance with our HBase • Evaluate it more using production requests – Before apply ZGC to our production HBase