the z garbage collector - oraclecr.openjdk.java.net/~pliden/slides/zgc-jfokus-2018.pdf · copyright...

96
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | The Z Garbage Collector Low Latency GC for OpenJDK Per Lidén & Stefan Karlsson HotSpot Garbage Collection Team Jfokus VM Tech Summit 2018

Upload: others

Post on 17-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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