Slide 1

Slide 1 text

Understanding Memory Management of JavaVM
 in 15 minutes @stanaka / id:stanaka JVM Operation Casual Talks at 2014/4/7

Slide 2

Slide 2 text

Shinji TANAKA CTO at Hatena Co., Ltd. ࠷ۙͷ׆ಈ: Immutable Infrastructure @stanaka / id:stanaka We’re Hiring at both KYOTO and TOKYO!

Slide 3

Slide 3 text

Java Virtual Machine ʮ͸ͯͳʯͰಈ͍͍ͯΔ(͍ͨ)JavaVM Hadoop Solr Elasticsearch Scala ← new!

Slide 4

Slide 4 text

powered by Scala https://mackerel.io/

Slide 5

Slide 5 text

JVMͷࠔΓͲ͜Ζ ࡉ΍͔ͳνϡʔχϯά͕Ͱ͖Δ ىಈ͕஗͍ σϑΥϧτ஋͕͍͚ͯͳ͍ ωοτ্ʹݹ͍৘ใ͕ଟ͍

Slide 6

Slide 6 text

JVMͷࠔΓͲ͜Ζ ࡉ΍͔ͳνϡʔχϯά͕Ͱ͖Δ ىಈ͕஗͍ σϑΥϧτ஋͕͍͚ͯͳ͍ ωοτ্ʹݹ͍৘ใ͕ଟ͍ G1HeapRegionSizeͬͯͳʹ?

Slide 7

Slide 7 text

JVMͷࠔΓͲ͜Ζ ࡉ΍͔ͳνϡʔχϯά͕Ͱ͖Δ ىಈ͕஗͍ σϑΥϧτ஋͕͍͚ͯͳ͍ ωοτ্ʹݹ͍৘ใ͕ଟ͍ ࢖͍͜ͳ͢ʹ͸ɺͪΌΜͱͨ͠஌͕ࣝඞཁ!! G1HeapRegionSizeͬͯͳʹ?

Slide 8

Slide 8 text

Memory Model in JavaVM Stack ← ελοΫྖҬ εϨου͝ͱʹ͋Δ Non Heap ← JavaVM಺෦Ͱ࢖͏ྖҬ ίʔυΩϟογϡ (JIT݁ՌͳͲ) Permanent Generation (Java8͔Β͸࡟আ) Heap ← ΞϓϦέʔγϣϯ͕࢖͏ྖҬ GCର৅

Slide 9

Slide 9 text

Heap Young Generation Eden Space Survivor Space (ෳ਺͋Δ) Old / Tenured Generation

Slide 10

Slide 10 text

Garbage Collection Algorithms Mark & Sweep Mark & Compaction Generational GC (JDK 1.2, 1998) Parallel GC Incremental GC (-Xincgc, Java8Ͱඇਪ঑) Concurrent Mark-Sweep GC, CMS (JDK 1.4.1 2002) Garbage-First GC, G1 GC (JDK 1.6u14 2009)

Slide 11

Slide 11 text

Minor-GC from Memory Management in the Java HotSpot Virtual Machine [Whitepaper2006]

Slide 12

Slide 12 text

Minor-GC from Memory Management in the Java HotSpot Virtual Machine [Whitepaper2006]

Slide 13

Slide 13 text

Parallel Collector from Memory Management in the Java HotSpot Virtual Machine [Whitepaper2006]

Slide 14

Slide 14 text

Concurrent GC (CMS) from Memory Management in the Java HotSpot Virtual Machine [Whitepaper2006]

Slide 15

Slide 15 text

Pros/Cons of CMS Pros Concurrent! Stop-the-World͕࣌ؒ୹͔͍ Cons Old Gen͕flagmentԽ(compaction͞Εͳ͍)͠
 Old GenͰͷϝϞϦ֬อ͕஗͘ͳΔ

Slide 16

Slide 16 text

CMS / G1 from The Garbage-First Garbage Collector [JavaOne2008]

Slide 17

Slide 17 text

CMS vs G1 ෼཭͞ΕͨYoungྖҬΛ࣋ͨͳ͍ (G1) Heap͕ϦʔδϣϯͰ෼ׂ͞ΕΔ ΦϒδΣΫτ഑ஔͷ࠷దԽ͕͞ΕΔ(G1) SparseͳϦʔδϣϯ͸࠶഑ஔ͞ΕCompaction͞ΕΔ Snapshot-at-the-beginingʹΑΔMarking(G1) CMSͰ͸Dirty-card

Slide 18

Slide 18 text

GC Benchmark Parallel CMS G1 Total GC pauses 20,930ms 18,870ms 62,000ms Max GC pause 721ms 64ms 50ms JIRA benchmark test for 30 minutes with -Xms256m -Xmx768m -XX:MaxPermSize=256m https://plumbr.eu/blog/g1-vs-cms-vs-parallel-gc Tuning͢ΔͱG1ͷ΄͏͕CPUෛՙ΋ ؚΊͯ΋ྑ͍ͱ͍͏݁Ռ΋͋Δ [JavaOne2013]

Slide 19

Slide 19 text

ͲͷGCΛ࢖͏΂͖? ϫʔΫϩʔυͱαʔόʔεϖοΫ࣍ୈ ώʔϓαΠζ (਺ඦMBʙ਺ेGBʙ਺TB) ΦϒδΣΫτੜ੒਺ɺαΠζɺण໋ͷ෼෍ CPUޮ཰ͱϨΠςϯγͱνϡʔχϯάͷखؒ τϨʔυΦϑ

Slide 20

Slide 20 text

Reference Memory Management in the Java HotSpot Virtual Machine ˑ http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf [Whitepaper2006] A Generational Mostly-concurrent Garbage Collector https://www.cs.purdue.edu/homes/hosking/ismm2000/papers/printezis.pdf [ISMM2000] The Garbage-First Garbage Collector http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.63.6386&rep=rep1&type=pdf [ISMM2004] ˑ http://www.oracle.com/technetwork/server-storage/ts-5419-159484.pdf [JavaOne 2008] Garbage-First Garbage Collector: Migration to, Expectations and Advanced Tuning. ˑ http://www.slideshare.net/MonicaBeckwith/garbage-first-garbage-collector-g1-gc-migration-to- expectations-and-advanced-tuning [JavaOne2013] Java Virtual Machine Technology http://docs.oracle.com/javase/8/docs/technotes/guides/vm/ International Symposium on Memory Management (ISMM) http://www.sigplan.org/conferences/ismm/main