Slide 1

Slide 1 text

ͬ͘͟Γ
 Θ͔ͬͨؾʹͳΔ ϞμϯGC ೖ໳ JJUG CCC 2018 Spring @yokotaso

Slide 2

Slide 2 text

Agenda • ͜Ε·ͰͷGCͱͳͥ৽GC͕ඞཁͳͷ͔ • Shenandoah GC • ZGC • Epsilon GC

Slide 3

Slide 3 text

͜Ε·ͰͷGC

Slide 4

Slide 4 text

GCͱΞϓϦఀࢭ(STW) Compaction GC Parallel GC young gc old gc GC = ΞϓϦέʔγϣϯεϨουఀࢭ ϝϞϦ͕ϑϥάϝϯτ͠ͳ͍ CPUෛՙ͸খ͍͞ Stop The world = ΞϓϦέʔγϣϯεϨουͷఀࢭ Mark Compaction GC Noop

Slide 5

Slide 5 text

GCͱΞϓϦఀࢭ(STW) CMS GC Compaction GC young gc marking sweep GC old gc initial-mark final-remark young gc͸ΞϓϦέʔγϣϯεϨουఀࢭ major gc͸΄΅ฒྻ ϝϞϦͷϑϥάϝϯτ͕ܽ఺ Stop The world = ΞϓϦέʔγϣϯεϨουͷఀࢭ Concurrent = ΞϓϦέʔγϣϯεϨουͱฒྻ

Slide 6

Slide 6 text

GCͱΞϓϦఀࢭ(STW) G1GC Compaction GC young gc Marking old gc initial-mark final-remark young gc͸ΞϓϦέʔγϣϯεϨουఀࢭ major gc͸໨ඪఀࢭ࣌ؒΛݩʹGCΛߦ͏ ϝϞϦ͕ϑϥάϝϯτ͠ͳ͍ Stop The world = ΞϓϦέʔγϣϯεϨουͷఀࢭ Compaction GC Concurrent = ΞϓϦέʔγϣϯεϨουͱฒྻ

Slide 7

Slide 7 text

GCͱΞϓϦఀࢭ(STW) Parallel GC CMS GC G1GC young gc Concurrent mark Concurrent sweep Mark Concurrent mark old gc Compaction GC Compaction GC Compaction GC Compaction GC Compaction GC Noop

Slide 8

Slide 8 text

GCͱΞϓϦͷఀࢭ(STW) • ίϯύΫγϣϯGCͰఀࢭ
 ੈ୅ܕGC͸Young GCͰఀࢭ
 ੜଘͷΦϒδΣΫτͷ଴ආͰఀࢭ • ίϯύΫγϣϯ͠ͳ͍ͱϝϞϦ͕
 ϑϥάϝϯτͯ͠͠·͏

Slide 9

Slide 9 text

ͳͥ৽GCͳͷ͔

Slide 10

Slide 10 text

৽͍͠GCͷඞཁੑ • ڊେώʔϓΛ࢖͏ΞϓϦέʔγϣϯͷ୆಄
 ElasticsearchͳͲ • ίϯύΫγϣϯܕGCͷఀࢭΛ΍Ί͍ͨ
 Young GC / G1GCͷίϯύΫγϣϯ • ώʔϓྖҬͷେ͖͞ͱGCͰͷఀࢭ͕࣌ؒൺྫ

Slide 11

Slide 11 text

Shenandoah GC

Slide 12

Slide 12 text

Shenandoah GC • Redhat͕ࣾ։ൃͨ͠GC • 100GBͱ2GBͷఀࢭ͕࣌ؒมΘΒͳ͍ • 2018/05 όοΫϙʔτ͕ඞཁ

Slide 13

Slide 13 text

GCͷಛ௃ • ੈ୅ܕϝϞϦ؅ཧΛ͠ͳ͍ • ϦʔδϣϯܕͷϝϞϦ؅ཧ • ฒྻϚʔΩϯάɾฒྻίϯύΫγϣϯ • ΞϓϦέʔγϣϯͱฒྻͰಈ͔͠ͳ͕Β
 ίϯύΫγϣϯGC͢Δ೉͠͞ͱ͸ʁ

Slide 14

Slide 14 text

ฒྻίϯύΫγϣϯͷ໰୊఺ Pointer x = 1 y = 2 z= 3 Pointer x = 1 y= 2 z= 3 GCεϨου͕Ҡಈத • GCεϨου͕ΦϒδΣΫτͷҠಈதʹ
 ϦϑΝϨϯεͷॻ͖׵͕͑ى͖ΔՄೳੑ Ͳ͕ͬͪຊ෺ʁ

Slide 15

Slide 15 text

ΦϒδΣΫτͷϔομ͕ΩϞ Pointer Header ͜ΕΛղܾ͢ΔͨΊʹBrooks pointerΛಋೖ
 ϙΠϯλ͕ࣗ෼Ҏ֎ͷϔομΛࢦ͍ͯ͠Δ৔߹
 ͦͷઌͷΦϒδΣΫτΛࢀর͢Δ x = 1 y = 2 z = 3 Pointer Header x = 1 y= 2 z= 3 ຊ෺ ผͷ৔ॴʹ଴ආ

Slide 16

Slide 16 text

Brooks pointer Pointer Header x = 1 y = 2 z= 3 Pointer Header x = 1 y= 2 z= 3 ࢀরઌ͕ίϯύΫγϣϯ͞Εͨݹ͍ΦϒδΣΫτͳΒ ϔομʔΛͨͲͬͯɺ৽͍͠ΦϒδΣΫτΛࢀর͢Δ

Slide 17

Slide 17 text

GC શମΛோΊͯΈΔ Region Region Region Region Root

Slide 18

Slide 18 text

Initial-Mark Root Region Region Region Region Root͔ΒͨͲΕΔΦϒδΣΫτΛϚʔΫ͢Δ Stop the world

Slide 19

Slide 19 text

Concurrent-Mark Root Region Region Region Region Initial-MarkͰϚʔΫͨ͠ΦϒδΣΫτΛͨͲͬͯϚʔΫ͢Δ Concurrent ௥Ճ͞Εͨࢀর ❌ ࡟আ͞Εͨࢀর

Slide 20

Slide 20 text

Final-Remark Root Region Region Region Region Concurrent-Markதʹൃੜͨ͠
 ࢀরͷมߋ൓өɾΰϛΦϒδΣΫτͷ֬ఆ Stop the world

Slide 21

Slide 21 text

Concurrent-Compaction Root Region Region Region Region ίϯύΫγϣϯ͢ΔϦʔδϣϯΛܾఆͯ͠
 ΦϒδΣΫτΛୀආ͢Δ ୀආ͢ΔϦʔδϣϯ Concurrent

Slide 22

Slide 22 text

Concurrent-Compaction Root Region Region Region Region ίϯύΫγϣϯ͢ΔϦʔδϣϯΛܾఆͯ͠
 ΦϒδΣΫτΛୀආ͢Δ Concurrent

Slide 23

Slide 23 text

Concurrent-updateReference Root Region Region Region Region ࢀরઌͷϙΠϯλΛୀආઌʹߋ৽͢Δ Concurrent ৽͍͠ࢀর ଴ආઌʹϙΠϯλߋ৽

Slide 24

Slide 24 text

Final-updateReference Root Region Region Region Region Concurrent-updateReferenceதʹൃੜͨ͠ߋ৽Λ൓ө͢Δ Stop the world ۭʹͳͬͨʂ

Slide 25

Slide 25 text

GCશମΛͳ͕ΊͯΈΔ Initial Mark Final Remark Concurrent Mark Concurrent Compaction update Reference Concurrent update Reference final update Reference Application work Application work Application work ฒྻίϯύΫγϣϯͷ͓͔͛Ͱ
 ίϯύΫγϣϯ࣌ͷSTWΛͳͭͭ͘͠
 ϑϥάϝϯτΛ๷͙͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨ Stop the world

Slide 26

Slide 26 text

ZGC

Slide 27

Slide 27 text

ZGC • OracleͰ։ൃ͞ΕͨGC • ਺TBͷώʔϓͰ΋GCʹΑΔఀࢭ࣌ؒ͸
 ୯ௐ૿Ճ͠ͳ͍ • 2018/05ɺόοΫϙʔτ͕ඞཁ • Linux 64bit ͷΈಈ࡞

Slide 28

Slide 28 text

Shenandoah GCͱࣅ͍ͯΔ • ίϯηϓτ͸ Shenandoah GCͱಉ͡
 ੈ୅؅ཧͳ͠ɾϦʔδϣϯܕͷϝϞϦ؅ཧ
 ฒྻίϯύΫγϣϯ • Linux 64 bit OSͰ͔͠ར༻Ͱ͖ͳ͍

Slide 29

Slide 29 text

ZGCͰಛ௃తͳ΋ͷ • ΧϥʔɾϙΠϯλ • Linux Ծ૝ϝϞϦͷ׆༻
 64bitͷΞυϨεදݱΛϑϧ׆༻͢Δ • ϑΥϫʔσΟϯάɾςʔϒϧ

Slide 30

Slide 30 text

ΧϥʔɾϙΠϯλ • ΦϒδΣΫτͷঢ়ଶΛΧϥʔͱͯ͠දݱ • ϚʔΫࡁ 0(marked0) ϚʔΫϑΣʔζʹ࢖͏ • ϚʔΫࡁ 1(marked1) ޙͰৄ͘͠ • ΦϒδΣΫτ଴ආࡁ (remapped)

Slide 31

Slide 31 text

ΦϒδΣΫτͷΞυϨεදݱ 42 bit ࠷େ4TBͷΞυϨεΛදݱͰ͖Δ 4 1 17 bit ະ࢖༻ ΧϥʔϙΠϯλΛදݱ 1. 64bitͷΞυϨεۭؒશ෦࢖͏ 2. ώʔϓΞυϨε͸ԼҐ42bitΛར༻ 3. 4bitͰΧϥʔϙΠϯλͷ৭Λදݱ

Slide 32

Slide 32 text

64bitΞυϨεΛ࠷େݶར༻ Heap(4TB) marked0 marked1 remapped 0x0000040000000000 0x0000000000000000 0x0000080000000000 0x00000C0000000000 0x0000100000000000 0x0000140000000000 0x000010001234abcdef 1. ΦϒδΣΫτ͸଴ආࡁΈ 2. 001234abcdefʹ࣮ମ ZGCͰ͸64bitͷΞυϨεΛ࢖͏.ϝϞϦ͕128TBඞཁ

Slide 33

Slide 33 text

ڊେϝϞϦͷਖ਼ମ͸Ծ૝Խ • ZGCͰ͸64bitΛ͢΂ͯ࢖͏ͷͰ128TBඞཁ • ͦΜͳڊେͳϝϞϦͳ͍ΜͰ͕͢…
 ͦ͜ͰԾ૝ϝϞϦΛ࢖ͬͯղܾ͢Δ Linuxͷ͍͍ຊ͕࠷ۙͰͨΒ͍͠Ͱ͢Α

Slide 34

Slide 34 text

GC શମΛோΊͯΈΔ Region Region Region Region Root

Slide 35

Slide 35 text

Initial-Mark Root Region Region Region Region Root͔ΒͨͲΕΔΦϒδΣΫτΛ ͰϚʔΫ͢Δ Stop the world

Slide 36

Slide 36 text

Concurrent-Mark Root Region Region Region Region Initial-MarkͰϚʔΫͨ͠ΦϒδΣΫτΛͨͲͬͯϚʔΫ͢Δ Concurrent ௥Ճ͞Εͨࢀর ❌ ࡟আ͞Εͨࢀর

Slide 37

Slide 37 text

Final-Remark Root Region Region Region Region Concurrent-Markதʹൃੜͨ͠ࢀরͷมߋ൓өͱ
 ΰϛΦϒδΣΫτͷ֬ఆ Stop the world

Slide 38

Slide 38 text

Concurrent-Compaction Root Region Region Region Region ίϯύΫγϣϯ͢ΔϦʔδϣϯΛܾఆ.
 ΦϒδΣΫτΛ଴ආࡁΈͷ ͰϚʔΫͯ͠ɺୀආ͍ͯ͘͠ɻ ୀආ͢ΔϦʔδϣϯ Concurrent

Slide 39

Slide 39 text

Concurrent-Compaction Root Region Region Region Region Concurrent ଴ආͨ͠ΦϒδΣΫτ͸
 ϑΥϫʔσΟϯάςʔϒϧʹϙΠϯλΛه࿥ ϑΥϫʔσΟϯάɾςʔϒϧ

Slide 40

Slide 40 text

ϑΥϫʔσΟϯάɾςʔϒϧ • Shenandoah GCͩͱΦϒδΣΫτ͝ͱʹ
 ϔομʔΛ෇͚Δ෼ɺΦʔόʔϔου͕େ͖͍ • ΧϥʔϙΠϯλͷ͓͔͛ͰΦϒδΣΫτ͕
 ݹ͍ɾ৽͍͠Λ൑அՄೳ • ϑΥϫʔσΟϯάɾςʔϒϧͰϝϞϦઅ໿

Slide 41

Slide 41 text

ࢀরͷߋ৽͸ʁ

Slide 42

Slide 42 text

GCશମΛͳ͕ΊͯΈΔ Initial Mark Final Remark Concurrent Mark Concurrent Compaction Application work Application work

Slide 43

Slide 43 text

GCશମΛͳ͕ΊͯΈΔ ark Final Remark oncurrent Mark Concurrent Compaction pplication work Application work Initial Mark Final Remark Concurrent Mark/Remap Concurrent Compaction Application work Application work GC1प໨ GC2प໨

Slide 44

Slide 44 text

ࢀরͷߋ৽͸࣍ͷGCαΠΫϧͰ • ࢀরͷߋ৽͸࣍ͷConcurrent-Markதʹ΍Δ • ਖ਼໊ࣜশ͸Concurrent-Mark/Remap • ࢀরΛͨͲΔճ਺Λઅ໿ • ϚʔΩϯά͞ΕͨΦϒδΣΫτ͸
 ͍ͭͷGCαΠΫϧͰϚʔΩϯά͞Εͨʁ

Slide 45

Slide 45 text

Concurrent-Mark/Remap Root Region Region Region Region Concurrent ৽͘͠௥Ճ͞Εͨࢀর͸ΧϥʔϙΠϯλͷ ϑϥά͕ҧ͏ͷͰɺ ͰϚʔΫ͠ͳ͓͠ ϑΥϫʔσΟϯάɾςʔϒϧ ࢀর͕௥Ճ͞ΕͨͷͰ
 ϚʔΫ͠௚͠

Slide 46

Slide 46 text

Concurrent-Mark/Remap Root Region Region Region Region Concurrent ΦϒδΣΫτͷࢀরΛߋ৽΍଴ආ.
 ϦʔδϣϯΛ׬શʹഇغ͢Δ ۭʹͳͬͨʂ ଴ආ

Slide 47

Slide 47 text

Epsilon GC

Slide 48

Slide 48 text

Epsilon GC • ΞϓϦέʔγϣϯεϨου͸ఀࢭ͠ͳ͍ • CPUͷෛՙ͸΄ͱΜͲͳ͠ • GCͷ࣌ؒ͸ݶΓͳ͘0ʹ͍ۙ

Slide 49

Slide 49 text

ͳͥͳΒ

Slide 50

Slide 50 text

ͳʹ΋͠ͳ͍GC

Slide 51

Slide 51 text

ʋ(ŋωŋ)/ţƄŠŖ

Slide 52

Slide 52 text

Epsilon GC • JVM։ൃ༻ͷGC • ύϑΥʔϚϯεଌఆ࣌ʹGCͰͷੑೳྼԽΛ
 ഉআ͢ΔͨΊ • ώʔϓ͕ຒ·Δͱ OutOfMemoryError • ຊ൪؀ڥͰ͸࢖Θͳ͍ͰͶ

Slide 53

Slide 53 text

·ͱΊ • ڊେώʔϓɾଟίΞલఏΞϓϦέʔγϣϯ༻GC
 ఀࢭ͕࣌ؒ໰୊ͳΒݕ౼ͷՁ஋͋Γ • Linux 64 bit OSͳΒ ZGC • ͦΕҎ֎ͳΒ Shenandoah GC • Epsilon GC͸Կ΋͠ͳ͍GC