The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright...
Transcript of The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright...
![Page 1: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/1.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
The Z Garbage CollectorLow Latency GC for OpenJDK
Per Lidén & Stefan KarlssonHotSpot Garbage Collection TeamJfokus VM Tech Summit 2018
![Page 2: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/2.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
2
![Page 3: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/3.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Agenda
What is ZGC?
Some Numbers
Under The Hood
Going Forward
How To Get Started
1
2
3
4
5
3
![Page 4: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/4.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Agenda
What is ZGC?
Some Numbers
Under The Hood
Going Forward
How To Get Started
1
2
3
4
5
4
![Page 5: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/5.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
A Scalable Low Latency Garbage Collector
5
![Page 6: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/6.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Goals
Multi-terabyte heaps Max GC pause time
Lay the foundation for future GC features
Max application throughput reduction
10msTB
15%
6
![Page 7: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/7.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
GC pause times do not increase with heap or live-set size
7
![Page 8: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/8.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
• New garbage collector
• Load barriers
• Colored pointers
• Single generation
• Partial compaction
• Region-based
• Immediate memory reuse
• NUMA-aware
• Concurrent
✔Marking
✔ Relocation/Compaction
✔ Relocation Set Selection
✔ Reference Processing
✔ JNI WeakRefs Cleaning
- StringTable/SymbolTable Cleaning
- Class Unloading
At a Glance
8
![Page 9: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/9.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Current Status
• Design and implementation approaching mature and stable
• Main focus on Linux/x86_64
–Other platforms can be added if there’s enough demand
• Performance looks very good– Both in terms of latency and throughput
9
![Page 10: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/10.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Agenda
What is ZGC?
Some Numbers
Under The Hood
Going Forward
How To Get Started
1
2
3
4
5
10
![Page 11: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/11.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Mode: Composite
Heap Size: 128G
OS: Oracle Linux 7.4
HW: Intel Xeon E5-2690 2.9GHz2 sockets, 16 cores (32 hw-threads)
SPECjbb®2015 is a registered trademark of the Standard PerformanceEvaluation Corporation (spec.org). The actual results are not representedas compliant because the SUT may not meet SPEC's requirements forgeneral availability.
SPECjbb®2015 – Score
11
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
ZGC Parallel G1
(Higher is better)
max-JOPS (Throughput) critical-JOPS (Throughput with latency requirements)
![Page 12: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/12.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
1
10
100
1000
ZGC Parallel G1
GC
Pau
se T
imes
(m
s)
Logarithmic scale
Average 95th percentile 99th percentile 99.9th percentile Max
0
100
200
300
400
500
600
700
800
900
ZGC Parallel G1
GC
Pau
se T
imes
(m
s)
Linear scale
Average 95th percentile 99th percentile 99.9th percentile Max
SPECjbb®2015 – Pause Times(Lower is better)
Same data, different scales
12
![Page 13: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/13.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
2
3
Agenda
What is ZGC?
Some Numbers
Under The Hood
Going Forward
How To Get Started
1
4
5
13
![Page 14: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/14.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
14
![Page 15: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/15.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
15
Mark objects pointed to by roots
![Page 16: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/16.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
16
Walk the object graph and mark objects
![Page 17: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/17.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
17
Synchronization point(Weak roots cleaning)
![Page 18: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/18.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
18
Reference processingWeak root cleaning
Relocation set selection
![Page 19: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/19.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
19
Handle roots pointing into the relocation set
![Page 20: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/20.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
20
Relocate objects in the relocation set
![Page 21: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/21.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark/Remap
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
GC Cycle
21
![Page 22: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/22.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
ConcurrentRemap
22
GC Cycle
![Page 23: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/23.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
ConcurrentRemap
GC Cycle
23
Walks object graph
![Page 24: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/24.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
ConcurrentMark
Pause Mark End Pause Relocate StartPause Mark Start
ConcurrentPrepare for Reloc.
ConcurrentRelocate
ConcurrentRemap
GC Cycle
24
Walks object graph
![Page 25: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/25.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
ZGC Phases
Concurrent RemapConcurrent Mark
Mark End Relocate StartMark Start
Prepare for Reloc Concurrent Reloc Concurrent RemapConcurrent Mark
Concurrent Mark
Mark End Relocate StartMark Start
Prepare for Reloc Concurrent Reloc
Mark End Relocate StartMark Start
Prepare for Reloc Concurrent Reloc Concurrent Remap
GC Cycle 1
GC Cycle 2
GC Cycle 3
25
![Page 26: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/26.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap Address Space
Heap Address Space
26
Maps into
Max heap size
Large address space reservation
Heap Memory/RegionsHeap Memory/Regions
![Page 27: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/27.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap Regions
• Dynamically created/destroyed
• Dynamically sized
–Multiple of 2MB on x86_64
• Size groups
– Small (2MB)
–Medium (32MB)
– Large (N x 2MB)
Also known as ZPages
27
![Page 28: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/28.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Colored Pointers
• Core design concept in ZGC
• Metadata stored in unused bits in 64-bit pointers
– No support for 32-bit platforms
– No support for CompressedOops
• Virtual Address-masking either in hardware, OS or software– Heap multi-mapping on Linux/x86_64
– Supported in hardware on Solaris/SPARC
28
![Page 29: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/29.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Colored PointersLayout on x86_64
29
Object Address (42 bits, 4TB address space)
64-bit Object Pointer
Unused (18 bits)
Marked0
Marked1Remapped
Finalizable
![Page 30: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/30.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Colored PointersLayout on x86_64
30
Object Address (42 bits, 4TB address space)
64-bit Object Pointer
Unused (18 bits)
Marked0
Marked1Remapped
Finalizable
Known to be marked?
![Page 31: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/31.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Colored PointersLayout on x86_64
31
Object Address (42 bits, 4TB address space)
64-bit Object Pointer
Unused (18 bits)
Marked0
Marked1Remapped
Finalizable
Known to not point into the relocation set?
![Page 32: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/32.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Colored PointersLayout on x86_64
32
Object Address (42 bits, 4TB address space)
64-bit Object Pointer
Unused (18 bits)
Marked0
Marked1Remapped
Finalizable
Only reachable through a Finalizer?
![Page 33: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/33.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap Multi-Mapping on Linux/x86_64
Heap Remapped View
Heap Marked1 View
Heap Marked0 View
0x00007FFFFFFFFFFF (128TB)
0x0000140000000000 (20TB)
0x0000100000000000 (16TB)
0x00000C0000000000 (12TB)
0x0000080000000000 (8TB)
0x0000040000000000 (4TB)
0x0000000000000000
Heap Memory
Address Space
Same memory mapped in 3different locations
Colored pointer (Remapped)0x0000100012345678
Colorless pointer0x0000000012345678
Colored pointer (Marked1)0x0000080012345678
Colored pointer (Marked0)0x0000040012345678
33
![Page 34: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/34.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap Mapping on Solaris/SPARC
• Single heap mapping
• Virtual address masking in hardware
• Load and store instructions mask out metadata bits
(ARM AArch64 also supports this)
Heap
Address Space
34
![Page 35: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/35.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
• Applied when loading an object reference from the heap
–Not when later using that reference to access the object
– Conceptually similar to the decoding of compressed oops
• Looks at the color of the pointer– Take action if the pointer has a “bad” color (mark/relocate/remap)
– Change to the “good” color (repair/heal)
• Optimized for the common case
–Most object references will have the “good” color
35
![Page 36: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/36.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
36
![Page 37: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/37.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
<load barrier needed here>
37
![Page 38: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/38.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
<load barrier needed here>
Object p = o; // No barrier, not a load from heap
o.doSomething(); // No barrier, not a load from heap
int i = obj.fieldB; // No barrier, not an object reference
38
![Page 39: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/39.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
<load barrier needed here>
39
![Page 40: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/40.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
load_barrier(register_for(o), address_of(obj.fieldA));
40
![Page 41: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/41.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
if (!(o & good_bit_mask)) {
if (o != null) {
slow_path(register_for(o), address_of(obj.fieldA));
}
}
41
![Page 42: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/42.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
Object o = obj.fieldA; // Loading an object reference from heap
if (o & bad_bit_mask) {
slow_path(register_for(o), address_of(obj.fieldA));
}
42
![Page 43: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/43.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
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
43
![Page 44: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/44.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
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
44
~4% execution overhead on SPECjbb®2015
![Page 45: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/45.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Load Barrier (r12 version)
mov 0x20(%rax), %rbx // Object o = obj.fieldA;
test %rbx, %r12 // Bad color?
jnz slow_path // Yes -> Enter slow path and
// mark/relocate/remap, adjust
// 0x20(%rax) and %rbx
Always keep bad_bit_mask in r12• Avoids a memory load, but reserves a register
• We don’t support compressed oops, so we can repurpose r12, the heap base register
45
![Page 46: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/46.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Mark
• Concurrent & Parallel
• Load barrier
– Detects loads of non-marked object pointers
• Finalizable mark
– Enabler for Concurrent Reference Processing
• Thread local handshakes– Used to synchronize end of concurrent mark
• Striped
46
![Page 47: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/47.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Striped Mark
• Scalability
– Heap divided into logical stripes
– Isolate each GC thread to work on its own stripe
–Minimized shared state
• Edge pushing vs. Node pushing
– Potentially more work
–… but lends itself better to parallel processing
47
![Page 48: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/48.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Striped Mark
GC Thread 1
GC Thread 2
GC Thread 3
GC Thread 0
Heap
48
![Page 49: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/49.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Striped Mark
Heap
0 1 2 3 0 1 2 3 0 1 2
GC Thread 1
GC Thread 2
GC Thread 3
GC Thread 0
49
![Page 50: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/50.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap
Striped Mark
0 1 2 3 0 1 2 3 0 1 2
GC Thread 1
GC Thread 2
GC Thread 3
Stripe 0
GC Thread 0
Stripe 1 Stripe 2 Stripe 3
50
![Page 51: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/51.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap
Striped Mark
0 1 2 3 0 1 2 3 0 1 2
GC Thread 1
GC Thread 2
GC Thread 3
Stripe 0
GC Thread 0
Stripe 1 Stripe 2 Stripe 3
51
![Page 52: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/52.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Heap
Striped Mark
0 1 2 3 0 1 2 3 0 1 2
GC Thread 2
GC Thread 3
Stripe 0
GC Thread 0
Stripe 1 Stripe 2 Stripe 3
GC Thread 1
Drained
52
![Page 53: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/53.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Reference Processing
• Concurrent & Parallel
• Liveness/Reachability analysis
– Complete after concurrent mark
– Strongly reachable, Final reachable and Unreachable
• Processing/Enqueuing– Single pass
– Load barrier blocks resurrection attempts (e.g. through Reference.get())
Dealing with Soft/Weak/Final/PhantomReference
53
![Page 54: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/54.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Relocation
• Concurrent & Parallel
• Load barrier
– Detects loads of object pointers pointing into the relocation set
– Java threads help out with relocation if needed
• Off-heap forwarding tables– No forwarding information stored in old copies of objects
– Important for immediate reuse of heap memory
54
![Page 55: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/55.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
GC Cycle Example
Roots
.....
1
2
4
85
3 6 7
55
![Page 56: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/56.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
56
![Page 57: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/57.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
57
![Page 58: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/58.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
58
![Page 59: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/59.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
59
![Page 60: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/60.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
60
![Page 61: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/61.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
61
![Page 62: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/62.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
62
![Page 63: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/63.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
63
![Page 64: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/64.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark End
Roots
.....
1
2
4
85
3 6 7
Marked
64
![Page 65: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/65.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Prepare for Relocate
Roots
.....
1
2
4
85
3 6 7
Relocation Set
Marked
65
![Page 66: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/66.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Prepare for Relocate
Roots
.....
1
2
4
85
3 6 7
Marked
66
Forwarding Tables
![Page 67: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/67.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7
Marked
Remapped +Relocated
67
![Page 68: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/68.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7
Marked
Remapped +Relocated
68
![Page 69: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/69.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7
Marked
Remapped +Relocated
69
![Page 70: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/70.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7 4
4 -> 4’
Marked
Remapped +Relocated
70
![Page 71: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/71.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Relocate
Roots
.....
1
2
4
85
3 6 7 4
4 -> 4’
Marked
Remapped +Relocated
71
![Page 72: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/72.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Relocate
Roots
.....
1
2
4
85
3 6 7 4
4 -> 4’5 -> 5’
5
Marked
Remapped +Relocated
72
![Page 73: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/73.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Relocate
Roots
.....
1
2 8
6 7 4
4 -> 4’5 -> 5’
5
Marked
Remapped +Relocated
73
Heap Region Becomes Reusable
![Page 74: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/74.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Relocate
Roots
.....
1
2 8
6 7 4
4 -> 4’5 -> 5’
5
Marked
Remapped +Relocated
74
8 -> 8’
8
![Page 75: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/75.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Relocate
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
75
Heap Region Becomes Reusable
![Page 76: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/76.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
GC Cycle Completed
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
76
![Page 77: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/77.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
GC Cycle Completed
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
77
Java Thread Loads Pointer
![Page 78: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/78.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
GC Cycle Completed
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
78
Java Thread Loads Pointer
![Page 79: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/79.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
79
![Page 80: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/80.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
80
![Page 81: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/81.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
81
![Page 82: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/82.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
82
![Page 83: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/83.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
83
![Page 84: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/84.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
84
![Page 85: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/85.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
85
![Page 86: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/86.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
86
![Page 87: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/87.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Pause Mark End (Second Cycle)
Roots
.....
1
2
4
4 -> 4’5 -> 5’
8 -> 8’
5 8
Marked
Remapped +Relocated
Remapped +Marked
87
![Page 88: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/88.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Concurrent Prepare for Relocate (Second Cycle)
Roots
.....
1
2
4
5 8
Marked
Remapped +Relocated
Remapped +Marked
Forwarding Tables Freed
88
![Page 89: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/89.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
2
3
Agenda
What is ZGC?
Some Numbers
Under The Hood
Going Forward
How To Get Started
1
4
5
89
![Page 90: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/90.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
In The Works
• GC Barrier API
–Make it easier to plug in new GCs (ZGC, Shenandoah, Epsilon)
• Concurrent class unloading & weak roots– Traditionally done in a Stop-The-World pause
– Impacts JITs and Runtime subsystems
• Addressing non-GC induced latencies– Time to safepoint/unsafepoint, object monitor deflation, etc.
90
![Page 91: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/91.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Foundation for Future GC Features
• Thread local GC scheme
• Track heap access patterns
• Use non-volatile memory for rarely used parts of the heap
• Compress or archive parts of the heap
• Object properties encoded in pointers
• Allocation tricks
• etc.
Colored Pointers + Load Barriers
91
![Page 92: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/92.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
2
3
Agenda
What is ZGC?
Some Numbers
Under The Hood
Going Forward
How To Get Started
1
4
5
92
![Page 93: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/93.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
How To Get Started
• Official early access builds will be available soon-ish, but until then…
• Download & build
• Run
Download
$ hg clone http://hg.openjdk.java.net/zgc/zgc$ cd zgc$ sh configure$ make images
$ ./build/linux-x86_64-<...>/images/jdk/bin/java
93
![Page 94: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/94.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
How To Get Started
• Enable ZGC: -XX:+UseZGC
• Tuning
– If you care about latency, do not overprovision your machine
–Max heap size: -Xmx<size>
–Number of concurrent GC threads: -XX:ConcGCThreads=<number>
• Logging
– Basic logging: -Xlog:gc
– Detailed logging useful when tuning: -Xlog:gc*
JVM Options
94
![Page 95: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/95.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
Feedback Welcome!
http://wiki.openjdk.java.net/display/zgc/
95
![Page 96: The Z Garbage Collector - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf · Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | Mode: Composite Heap](https://reader035.fdocuments.in/reader035/viewer/2022071001/5fbe4c97a13f847481536225/html5/thumbnails/96.jpg)