Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS

10 views

Published on

this talk covers GC basics, layout, collection concepts G1 GC, Z GC and Shenandoah algorithms and phases.

Published in: Software
  • Be the first to comment

  • Be the first to like this

OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS

  1. 1. © 2018 Arm Limited1 OPENJDK: IN THE NEW AGE OF CONCURRENT GARBAGE COLLECTORS Monica Beckwith
  2. 2. © 2018 Arm Limited2 About Me Java Champion, JavaOne Rock Star Regular speaker at various tech conferences Several published articles on topics including garbage collection, the Java memory model and others. Led Oracle’s Garbage First GC performance Java VM Performance Architect, Arm
  3. 3. © 2018 Arm Limited3 Agenda What I’ll try to cover in the next ~50 minutes Part 1 – Groundwork & Commonalities Laying the Groundwork - Stop-the-world vs concurrent collection Heap layout – regions and generations Basic Commonalities – Copying collector – from and to spaces Regions - occupied and free Collection set and priority Part 2 – Introduction & Differences Introduction to G1, Shenandoah and Z GCs – Algorithm Basic Differences – GC phases Marking algorithm Barriers Copying
  4. 4. © 2018 Arm Limited4 HotSpot Regionalized GCs: Groundwork
  5. 5. © 2018 Arm Limited5 STW vs Concurrent
  6. 6. © 2018 Arm Limited6 Application Threads STW
  7. 7. © 2018 Arm Limited7 Application Threads Safepoint Requested STW
  8. 8. © 2018 Arm Limited8 Application Threads Global or Thread Local? Safepoint Requested STW
  9. 9. © 2018 Arm Limited9 Application Threads Safepoint Executed Time To Safepoint (TTSP) Safepoint Requested Global STW
  10. 10. © 2018 Arm Limited10 Application Threads Safepoint Executed Time To Safepoint (TTSP) GC Threads Application Threads Safepoint Requested GC Completed Global STW
  11. 11. © 2018 Arm Limited11 Application Threads Global or Thread Local? Safepoint Requested Thread Local Handshakes
  12. 12. © 2018 Arm Limited12 Application Threads Safepoint Requested Thread Local Handshakes
  13. 13. © 2018 Arm Limited13 Application Threads GC Threads Application Threads Safepoint Requested GC Completed Thread Local Handshakes Handshakes
  14. 14. © 2018 Arm Limited14 Application Threads GC Threads Application Threads Safepoint Requested GC Completed Application Threads GC Threads Application Threads Safepoint Requested GC Completed Handshakes Thread Local Handshakes vs Global STW
  15. 15. © 2018 Arm Limited15 Concurrent GC Application Threads GC Threads
  16. 16. © 2018 Arm Limited16 Heap Layout Heap Z GC Shenandoah GC Young Generation G1 GC Old Generation
  17. 17. © 2018 Arm Limited17 HotSpot Regionalized GCs: Basic Commonalities
  18. 18. © 2018 Arm Limited18 Copying Collector aka Compacting Collector aka Evacuation HeapFrom Space To Space O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O GC ROOTS THREAD 1 STACK THREAD N STACK STATIC VARIABLES ANY JNI REFERENCES
  19. 19. © 2018 Arm Limited19 O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O GC ROOTS THREAD 1 STACK THREAD N STACK O O O O O STATIC VARIABLES ANY JNI REFERENCES O OO O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Copying Collector aka Compacting Collector aka Evacuation
  20. 20. © 2018 Arm Limited20 O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O Copying Collector aka Compacting Collector aka Evacuation
  21. 21. © 2018 Arm Limited21 Occupied and Free Regions O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O • List of free regions • In case of generational heap (like G1), the occupied regions could be young, old or humongous
  22. 22. © 2018 Arm Limited22 Collection Priority and Collection Set O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OOOO • Priority is to reclaim regions with most garbage • The candidate regions for collection/reclamation/relocation are said to be in a collection set • There are threshold based on how expensive a region can get and maximum regions to collect • Incremental collection aka incremental compaction or partial compaction • Usually needs a threshold that triggers the compaction • Stops after the desired reclamation threshold or free-ness threshold is reached • Doesn’t need to be stop-the-world
  23. 23. © 2018 Arm Limited23 HotSpot Regionalized GCs: Introduction
  24. 24. © 2018 Arm Limited24 Algorithm & Other Considerations Garbage Collectors G1 GC Shenandoah GC Z GC Regionalized? Yes Yes Yes Generational? Yes No No Compaction? Yes, STW, Forwarding address in header Yes, Concurrent, Brooks Style Indirection Pointer Yes, Concurrent, Colored Pointers Target Pause Times? 200ms 10ms 10ms Concurrent Marking Algorithm? SATB SATB Striped
  25. 25. © 2018 Arm Limited25 Algorithm & Other Considerations Garbage Collectors G1 GC Shenandoah GC Z GC Regionalized? Yes Yes Yes Generational? Yes No No Compaction? Yes, STW, Forwarding address in header Yes, Concurrent, Brooks Style Indirection Pointer Yes, Concurrent, Colored Pointers Target Pause Times? 200ms 10ms 10ms Concurrent Marking Algorithm? SATB SATB Striped
  26. 26. © 2018 Arm Limited26 Algorithm & Other Considerations Garbage Collectors G1 GC Shenandoah GC Z GC Regionalized? Yes Yes Yes Generational? Yes No No Compaction? Yes, STW, Forwarding address in header Yes, Concurrent, Brooks Style Indirection Pointer Yes, Concurrent, Colored Pointers Target Pause Times? 200ms 10ms 10ms Concurrent Marking Algorithm? SATB SATB Striped
  27. 27. © 2018 Arm Limited27 Algorithm & Other Considerations Garbage Collectors G1 GC Shenandoah GC Z GC Regionalized? Yes Yes Yes Generational? Yes No No Compaction? Yes, STW, Forwarding address in header Yes, Concurrent, Brooks Style Indirection Pointer Yes, Concurrent, Colored Pointers Target Pause Times? 200ms 10ms 10ms Concurrent Marking Algorithm? SATB SATB Striped
  28. 28. © 2018 Arm Limited28 HotSpot Regionalized GCs: Basic Differences – G1
  29. 29. © 2018 Arm Limited29 GC Phases of Marking & Compaction G1 GC Gist Initial Mark Mark objects directly reachable by the roots Concurrent Root Region Scanning Since initial mark is piggy-backed on a young collection, the survivor regions need to be scanned Concurrent Marking Snapshot-at-the-beginning (SATB) algorithm Final Marking Drain SATB buffers; traverse unvisited live objects Cleanup Identify and free completely free regions, sort regions based on liveness and expense STW Compaction Move objects in collection set to “to” regions; free regions in collection set •C. Hunt, M. Beckwith, P. Parhar, B. Rutisson. Java Performance Companion.
  30. 30. © 2018 Arm Limited30 Concurrent Marking SATB Algorithm Logical snapshot of the heap SATB marking guarantees that all garbage objects that are present at the start of the concurrent marking phase will be identified by the snapshot But, application mutates its object graph Any new objects are considered live For any reference update, the mutator needs to log the previous value in a log queue This is enabled by a pre-write barrier •C. Hunt, M. Beckwith, P. Parhar, B. Rutisson. Java Performance Companion. •https://www.jfokus.se/jfokus17/preso/Write-Barriers-in-Garbage-First-Garbage-Collector.pdf
  31. 31. © 2018 Arm Limited31 Barriers SATB Pre-Write Barrier The pseudo-code of the pre-write barrier for an assignment of the form x.f := y is: if (marking_is_active) { pre_val := x.f; if (pre_val != NULL) { satb_enqueue(pre_val); } } •C. Hunt, M. Beckwith, P. Parhar, B. Rutisson. Java Performance Companion.
  32. 32. © 2018 Arm Limited32 Barriers Post Write Barrier Consider the following assignment: object.field = some_other_object G1 GC will issue a write barrier after the reference is updated, hence the name. G1 GC filters the need for a barrier by way of a simple check as explained below: (&object.field XOR &some_other_object) >> RegionSize If the check evaluates to zero, a barrier is not needed. If the check != zero, G1 GC enqueues the card in the update log buffer https://www.jfokus.se/jfokus17/preso/Write-Barriers-in-Garbage-First-Garbage-Collector.pdf •C. Hunt, M. Beckwith, P. Parhar, B. Rutisson. Java Performance Companion.
  33. 33. © 2018 Arm Limited33 STW Compaction BodyHeader A Java Object Forwarding Pointer in Header Pointer Pointer to an InstanceKlass Mark Word b b GC workers compete to install the forwarding pointer From source: • An InstanceKlass is the VM level representation of a Java class. It contains all information needed for at class at execution runtime. • When marked the bits will be 11
  34. 34. © 2018 Arm Limited34 HotSpot Regionalized GCs: Basic Differences - Shenandoah
  35. 35. © 2018 Arm Limited35 GC Phases of Marking & Compaction Shenandoah GC Initial Mark Mark objects directly reachable by the roots Concurrent Marking Snapshot-at-the-beginning (SATB) algorithm Final Marking Drain SATB buffers; traverse unvisited live objects; identify collection set Concurrent Cleanup Free completely free regions Concurrent Compaction Move objects in collection set to “to” regions Initial Update Reference Initialize the update reference phase Concurrent Update Reference Scans the heap linearly; update any references to objects that have moved Final Update Reference Update roots to point to to-region copies Concurrent Cleanup Free regions in collection set https://wiki.openjdk.java.net/display/shenandoah/Main
  36. 36. © 2018 Arm Limited36 Concurrent Marking SATB Algorithm
  37. 37. © 2018 Arm Limited37 Barriers Pre-Write Barrier for Snapshot At the Beginning - Recap Needed for all updates Check if “marking-is-active” SATB_enqueue the pre_val •C. Hunt, M. Beckwith, P. Parhar, B. Rutisson. Java Performance Companion.
  38. 38. © 2018 Arm Limited38 Concurrent Compaction BodyHeader A Java Object Indirection Pointer Brooks Style Indirection Pointer Forwarding pointer is placed before the object Additional work of dereferencing per object
  39. 39. © 2018 Arm Limited39 Barriers Read Barrier – For Concurrent Compaction Here’s an assembly code snippet for reading a field: mov 0x10(%rsi),%rsi ; *getfield value Here’s what the snippet looks like with Shenandoah: mov -0x8(%rsi),%rsi ; read of forwarding pointer at address object - 0x8 mov 0x10(%rsi),%rsi ; *getfield value *Flood, Christine & Kennke, Roman & Dinn, Andrew & Haley, Andrew & Westrelin, Roland. (2016). Shenandoah: An open-source concurrent compacting garbage collector for OpenJDK. 1-9. 10.1145/2972206.2972210.
  40. 40. © 2018 Arm Limited40 Barriers Copying Write Barrier – For Concurrent Compaction *Flood, Christine & Kennke, Roman & Dinn, Andrew & Haley, Andrew & Westrelin, Roland. (2016). Shenandoah: An open-source concurrent compacting garbage collector for OpenJDK. 1-9. 10.1145/2972206.2972210. Needed for all updates to ensure to-space invariant Check if “evacuation_in_progress” Check if “in_collection_set” and “not_yet_copied” CAS (fwd-ptr(obj), obj, copy)
  41. 41. © 2018 Arm Limited41 HotSpot Regionalized GCs: Basic Differences - Z
  42. 42. © 2018 Arm Limited42 GC Phases of Marking & Compaction Z GC Initial Mark Mark objects directly reachable by the roots Concurrent Marking Striping - GC threads walk the object graph and mark Final Marking Traverse unvisited live objects; weak root cleaning Concurrent Prepare for Compaction Identify collection set; reference processing Start Compaction Handles roots into the collection set Concurrent Compaction Move objects in collection set to “to” regions Concurrent Remap (done with Concurrent Marking of next cycle since walks the object graph) Fixup of all the pointers to now-moved objects http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf
  43. 43. © 2018 Arm Limited43 Core Concept Metadata stores in the unused bits of the 64 bit pointers Virtual address mapping/tagging • Multi-mapping on x86-64 • Hardware support on SPARC, aarch64 http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf Colored Pointers Object Address 041 Unused M a r k e d 0 M a r k e d 1 R e m a p p e d F i n a l i z a b l e 4663 Object is known to be marked? Object is known to not be pointing into the relocation set? Object is reachable only through a Finalizer?
  44. 44. © 2018 Arm Limited44 Concurrent Marking Striping Heap divided into logical stripes GC threads work on their own stripe Minimizes shared state Load barrier to detect loads of non-marked object pointers Concurrent reference processing Thread local handshakes http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf Heap GC Thread0 GC Thread1 GC Threadn … 0 1 … n 0 1 … n 0 1 … n Stripe0 Stripe1 Stripen
  45. 45. © 2018 Arm Limited45 Barriers Read Barrier – For References Update a “bad” reference to a “good” reference Can be self-healing/repairing barrier when updates the source memory location Imposes a set of invariants – “All visible loaded reference values will be safely “marked through” by the collector, if they haven’t been already. All visible loaded reference values point to the current location of the safely accessible contents of the target objects they refer to.” Tene, G.; Iyengar, B. & Wolf, M. (2011), C4: The Continuously Concurrent Compacting Collector, in 'Proceedings of the international symposium on Memory management' , ACM, New York, NY, USA , pp. 79--88 .
  46. 46. © 2018 Arm Limited46 Example Object o = obj.fieldA; // Loading an object reference from heap load_barrier(register_for(o), address_of(obj.fieldA)); if (o & bad_bit_mask) { slow_path(register_for(o), address_of(obj.fieldA)); }
  47. 47. © 2018 Arm Limited47 Example mov 0x20(%rax), %rbx // Object o = obj.fieldA; test %rbx, (0x16)%r15 // Bad color? jnz slow_path // Yes -> Enter slow path and mark/relocate/remap, // adjust 0x20(%rax) and %rbx http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf
  48. 48. © 2018 Arm Limited48 Concurrent Compaction Load barrier to detect object pointers into the collection set Can be self-healing Off-heap forwarding tables enable to immediately release and reuse virtual and physical memory http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf Off-Heap Forwarding Tables
  49. 49. © 2018 Arm Limited49 Further Reading https://www.youtube.com/watch?v=VCeHkcwfF9Q https://www.usenix.org/legacy/events/vee05/full_papers/p46-click.pdf http://mail.openjdk.java.net/pipermail/zgc-dev/2017-December/000047.html http://hg.openjdk.java.net/zgc/zgc/file/ffab403eaf14/src/hotspot/share/gc/z/zBarrier.cpp https://wiki.openjdk.java.net/display/zgc/Main
  50. 50. The Cloud to Edge Infrastructure Foundation for a World of 1T Intelligent Devices Thank You!

×