the design of zgc - oraclecr.openjdk.java.net/~pliden/slides/zgc-plmeetup-2019.pdf · pause times....
TRANSCRIPT
![Page 1: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/1.jpg)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. |
The Design of ZGCA Scalable Low-Latency Garbage Collector for Java
Per Lidén (@perliden)Consulting Member of Technical StaffJava Platform Group, OracleJune 12, 2019
![Page 2: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/2.jpg)
Copyright © 2019, 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.
![Page 3: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/3.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
The Design of ZGC
![Page 4: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/4.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
A Scalable Low-Latency Garbage Collector
![Page 5: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/5.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Goals
Multi-terabyte heaps Max GC pause time
Easy to tuneMax application throughput reduction
10msTB
15%
![Page 6: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/6.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
ZGC at a Glance
Concurrent
Tracing
Compacting
Single generation
Region-based
NUMA-aware
Load barriers
Colored pointers
![Page 7: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/7.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
ZGC pause times do not increasewith the heap or live-set size
![Page 8: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/8.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
ZGC pause times do increasewith the root-set size
(Number of Java Threads)
![Page 9: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/9.jpg)
Copyright © 2019, 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
![Page 10: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/10.jpg)
Copyright © 2019, 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 CycleScan thread stacks
![Page 11: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/11.jpg)
Copyright © 2019, 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 CycleWalk object graph
![Page 12: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/12.jpg)
Copyright © 2019, 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 CycleSynchronization point
![Page 13: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/13.jpg)
Copyright © 2019, 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 CycleReference processing
Class unloadingRelocation set selection
![Page 14: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/14.jpg)
Copyright © 2019, 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
Scan thread stacks
![Page 15: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/15.jpg)
Copyright © 2019, 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
Compact heap
![Page 16: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/16.jpg)
Copyright © 2019, 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
![Page 17: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/17.jpg)
Copyright © 2019, 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
![Page 18: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/18.jpg)
Copyright © 2019, 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
![Page 19: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/19.jpg)
Copyright © 2019, 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
Walks object graph
![Page 20: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/20.jpg)
Copyright © 2019, 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
Walks object graph
![Page 21: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/21.jpg)
Copyright © 2019, 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
![Page 22: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/22.jpg)
Copyright © 2019, 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
Object Address (44 bits, 16TB address space)
64-bit Object Pointer
Unused (16 bits)
Colors
![Page 23: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/23.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Colored Pointers
Object Address (44 bits, 16TB address space)
64-bit Object Pointer
Unused (16 bits)
Marked0
Marked1Remapped
Finalizable
![Page 24: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/24.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Colored Pointers
Object Address (44 bits, 16TB address space)
64-bit Object Pointer
Unused (16 bits)
Marked0
Marked1Remapped
Finalizable
Known to be marked?
![Page 25: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/25.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Colored Pointers
Object Address (44 bits, 16TB address space)
64-bit Object Pointer
Unused (16 bits)
Marked0
Marked1Remapped
Finalizable
Known to not point into the relocation set?
![Page 26: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/26.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Colored Pointers
Object Address (44 bits, 16TB address space)
64-bit Object Pointer
Unused (16 bits)
Marked0
Marked1Remapped
Finalizable
Only reachable through a Finalizer?
![Page 27: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/27.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Colored Pointers
Object Address (44 bits, 16TB address space)
64-bit Object Pointer
Unused (16 bits)
Marked0
Marked1Remapped
Finalizable
![Page 28: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/28.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
• A small piece of code injected by the JIT in strategic places
–When loading an object reference from the heap
• Checks if the loaded object reference has a bad color– If so, take action and heal it
![Page 29: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/29.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
String n = person.name; // Loading an object reference from heap
String name;int age;double height;
...
Person
String
![Page 30: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/30.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
String n = person.name; // Loading an object reference from heap
<load barrier needed here>
String name;int age;double height;
...
Person
String
![Page 31: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/31.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
String n = person.name; // Loading an object reference from heap
<load barrier needed here>
String p = n; // No barrier, not a load from heap
n.isEmpty(); // No barrier, not a load from heap
int age = person.age; // No barrier, not an object reference
String name;int age;double height;
...
Person
String
![Page 32: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/32.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
String n = person.name; // Loading an object reference from heap
<load barrier needed here>
String name;int age;double height;
...
Person
String
![Page 33: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/33.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
String n = person.name; // Loading an object reference from heap
if (n & bad_bit_mask) {
slow_path(register_for(n), address_of(person.name));
}
String name;int age;double height;
...
Person
String
![Page 34: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/34.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
mov 0x10(%rax), %rbx // String n = person.name;
test %rbx, 0x20(%r15) // Bad color?
jnz slow_path // Yes -> Enter slow path and
// mark/relocate/remap, adjust
// 0x10(%rax) and %rbx
![Page 35: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/35.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Load Barrier
mov 0x10(%rax), %rbx // String n = person.name;
test %rbx, 0x20(%r15) // Bad color?
jnz slow_path // Yes -> Enter slow path and
// mark/relocate/remap, adjust
// 0x10(%rax) and %rbx
~4% execution overhead on SPECjbb®2015
![Page 36: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/36.jpg)
Copyright © 2019, 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
![Page 37: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/37.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Mark
• Concurrent & Parallel
• Load barrier
– Detects loads of non-marked object pointers
• Striped
– Heap divided into logical stripes
– Isolate each GC thread to work on its own stripe
–Minimized shared state
![Page 38: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/38.jpg)
Copyright © 2019, 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
![Page 39: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/39.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
GC Cycle Example
Heap Address Space
Heap
.....
![Page 40: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/40.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
GC Cycle Example
Roots
.....
1
2
4
85
3 6 7
![Page 41: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/41.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 42: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/42.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 43: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/43.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 44: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/44.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Mark Start
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 45: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/45.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 46: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/46.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 47: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/47.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 48: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/48.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Mark
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 49: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/49.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Mark End
Roots
.....
1
2
4
85
3 6 7
Marked
![Page 50: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/50.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Prepare for Relocate
Roots
.....
1
2
4
85
3 6 7
Relocation Set
Marked
![Page 51: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/51.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Prepare for Relocate
Roots
.....
1
2
4
85
3 6 7
Marked
Forwarding Tables
![Page 52: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/52.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7
Marked
Remapped +Relocated
![Page 53: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/53.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7
Marked
Remapped +Relocated
![Page 54: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/54.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Pause Relocate Start
Roots
.....
1
2
4
85
3 6 7
Marked
Remapped +Relocated
![Page 55: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/55.jpg)
Copyright © 2019, 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
![Page 56: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/56.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Concurrent Relocate
Roots
.....
1
2
4
85
3 6 7 4
4 -> 4’
Marked
Remapped +Relocated
![Page 57: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/57.jpg)
Copyright © 2019, 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
![Page 58: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/58.jpg)
Copyright © 2019, 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
Heap Region Becomes Reusable
![Page 59: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/59.jpg)
Copyright © 2019, 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
8 -> 8’
8
![Page 60: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/60.jpg)
Copyright © 2019, 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
Heap Region Becomes Reusable
![Page 61: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/61.jpg)
Copyright © 2019, 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
![Page 62: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/62.jpg)
Copyright © 2019, 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
Java Thread Loads Pointer
![Page 63: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/63.jpg)
Copyright © 2019, 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
Java Thread Loads Pointer
![Page 64: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/64.jpg)
Copyright © 2019, 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
![Page 65: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/65.jpg)
Copyright © 2019, 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
![Page 66: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/66.jpg)
Copyright © 2019, 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
![Page 67: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/67.jpg)
Copyright © 2019, 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
![Page 68: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/68.jpg)
Copyright © 2019, 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
![Page 69: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/69.jpg)
Copyright © 2019, 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
![Page 70: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/70.jpg)
Copyright © 2019, 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
![Page 71: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/71.jpg)
Copyright © 2019, 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
![Page 72: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/72.jpg)
Copyright © 2019, 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
![Page 73: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/73.jpg)
Copyright © 2019, 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
![Page 74: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/74.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Performance
![Page 75: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/75.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Mode: Composite
Heap Size: 128G
OS: Oracle Linux 7.5
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
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 76: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/76.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
0
100
200
300
400
500
600
ZGC Parallel G1
GC
Pau
se T
imes
(m
s)
Linear scale(Lower is better)
Average 95th percentile 99th percentile 99.9th percentile Max
SPECjbb®2015 – GC Pause Times
![Page 77: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/77.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
0,1
1
10
100
1000
ZGC Parallel G1
GC
Pau
se T
imes
(m
s)
Logarithmic scale(Lower is better)
Average 95th percentile 99th percentile 99.9th percentile Max
SPECjbb®2015 – GC Pause Times
![Page 78: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/78.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
0,1
1
10
100
1000
ZGC Parallel G1
GC
Pau
se T
imes
(m
s)
Logarithmic scale(Lower is better)
Average 95th percentile 99th percentile 99.9th percentile Max
SPECjbb®2015 – GC Pause Times
1.12
0.46
159323
155
482
![Page 79: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/79.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
0,1
1
10
100
1000
ZGC Parallel G1
GC
Pau
se T
imes
(m
s)
Logarithmic scale(Lower is better)
Average 95th percentile 99th percentile 99.9th percentile Max
SPECjbb®2015 – GC Pause Times
1.12
0.46
159323
155
482
![Page 80: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/80.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Going Forward
• Generational
• Sub-millisecond max pause times
• Support additional platforms
• Graal JIT support
![Page 81: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/81.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
ZGC Project
[email protected] [email protected]
http://wiki.openjdk.java.net/display/zgc/Main
http://hg.openjdk.java.net/jdk/jdk
![Page 82: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/82.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Thanks!
![Page 83: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/83.jpg)
Copyright © 2019, Oracle and/or its affiliates. All rights reserved. |
Questions?
![Page 84: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN](https://reader033.vdocuments.us/reader033/viewer/2022053021/5f86e41568e54535ef36bf60/html5/thumbnails/84.jpg)