the design of zgc - oraclecr.openjdk.java.net/~pliden/slides/zgc-plmeetup-2019.pdf · pause times....

84
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. | The Design of ZGC A Scalable Low-Latency Garbage Collector for Java Per Lidén (@perliden) Consulting Member of Technical Staff Java Platform Group, Oracle June 12, 2019

Upload: others

Post on 01-Aug-2020

2 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: The Design of ZGC - Oraclecr.openjdk.java.net/~pliden/slides/ZGC-PLMeetup-2019.pdf · pause times. PLIDEN

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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