Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scalaエンジニアなら知っておきたいJVMの話
Search
Ryuhei Ishibashi
July 02, 2021
Programming
0
45
Scalaエンジニアなら知っておきたいJVMの話
Javaを経由しないでScalaにはいっちゃった人向けにJavaやJVMについて基礎的な話をしました。
Ryuhei Ishibashi
July 02, 2021
Tweet
Share
More Decks by Ryuhei Ishibashi
See All by Ryuhei Ishibashi
QA素人がゼロからQA組織を立ち上げるno
rysh
0
130
Essential Refactoring for Scala with IDE
rysh
0
18
Other Decks in Programming
See All in Programming
DDDはなぜ難しいのか / 良いコードの定義と設計能力の壁
pospome
24
7.3k
孤独のCTOグルメという やや奇抜な企画をやった目的と効果
shoheimitani
3
1k
DocC Tutorial と TCA におけるテスト機能の紹介
kalupas226
1
330
チームでモデリングを育てるうえで 考えたこと・気づいたこと / Cultivating Modeling in Teams: Thoughts and Insights
mackey0225
5
2.2k
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
PRO
1
340
Deno に Web 標準 API を実装する / Implementing Web Standard API to Deno
petamoriken
0
350
Kotlinを用いたDSL的な設計手法と使用上の注意
kohii00
3
530
Why 1 + 1 = 2 in Swift?
1plus4
1
240
Crafting a Own PHP - ウキウキ手作りミニマリストPHP
uzulla
4
1.1k
Laravel標準バリデーションでできること
hmb_ok
2
360
生成 AI の中身を覗いてみよう〜基礎から医療現場での応用まで〜
soh9834
2
760
SwiftUI, Jetpack Composeの導入で変化した「家族アルバム みてね」のアプリ開発体験
hicka04
6
400
Featured
See All Featured
Robots, Beer and Maslow
schacon
PRO
154
7.9k
Being A Developer After 40
akosma
56
580k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Typedesign – Prime Four
hannesfritz
36
2k
What's new in Ruby 2.0
geeforr
335
31k
Designing with Data
zakiwarfel
94
4.8k
How to name files
jennybc
62
92k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
Why Our Code Smells
bkeepers
PRO
330
56k
A Philosophy of Restraint
colly
195
15k
Making the Leap to Tech Lead
cromwellryan
122
8.4k
Transcript
ScalaΤϯδχΞͳΒ ͓͖͍ͬͯͨ JVMͷ
Javaͷ֓ཁ Java Programing Language Java Runtime Edition Java Development Kit
Java Virtual Machine
Java Runtime Edition JDK11͔Β୯ಠͰͷΛഇࢭ γεςϜͰJREΛڞ༗͢Δํ͔ΒΞϓϦέʔγϣϯ ݸผʹόϯυϧ͢Δํ JREαΠζJava9ͷProject JigsawͰղܾͨͨ͠Ί
Java Development Kit ։ൃʹؔΘΔπʔϧҰࣜΛἧ͑ͨηοτ ͍ͦ͏ͳͷ JavaτϥϒϧγϡʔςΟϯάɺϓϩϑΝΠϦϯάɺϞχλϦϯάɺ͓Α ͼཧπʔϧ(jcmdɺjconsoleɺjmcɺjvisualvm) ϞχλϦϯάɾπʔϧ(jpsɺjstatɺjstatd) τϥϒϧγϡʔςΟϯάɾπʔϧ(jinfoɺjhatɺjmapɺjsadebugdɺjstack) JavaMissionControle(jmc)VisualVMͷ্Ґޓ
Java Virtual Machine ΫϥεϑΝΠϧ(όΠτίʔυ)Λػցޠʹม࣮ͯ͠ߦ ༷The Java Virtual Machine Specificationʹ͋Δ OpenJDK࣮ͷҰͭɻΞΫςΟϒͳͷͰ11ݸ΄Ͳ͋Δ
Azulͱ͍͏ձࣾͷZing JVM͕࠷ڧɻͪΖΜ༗ྉɻ ScalaScalaϑΝΠϧΛJavaΫϥεϑΝΠϧʹมͯ͠JVM Ͱ࣮ߦ͍ͯ͠Δ
HotSpot JVMͷΞʔΩςΫνϟ
࣮ߦϓϩηε 1. javaϑΝΠϧΛίϯύΠϧͯ͠ΫϥεϑΝΠϧΛੜ 2. όΠτίʔυ(ΫϥεϑΝΠϧ)ͷΠϯλʔϓϦλͱ͠ ͯಈ࡞ 3. ౷ܭใͱόΠτίʔυΛͱʹόοΫάϥϯυ Ͱ࠷దԽ(JITίϯύΠϧ)
JITίϯύϧ 1. JITίϯύΠϧͷத̎ஈ֊͋Δ(C1,C2) 2. ༧ଌ͕֎ΕͨΒ࠷దԽͯ͠Γ͢ 3. ओͳ࠷దԽํ๏ΠϯϥΠϯԽ 4. σϑΥϧτͰ1ສճ࣮ߦͨ͠ޙʹͦͷϝιουΛί ϯύΠϧ(CompileThresholdͰมߋՄೳ)
࠷దԽͷ֬ೝ 1. ࠷దԽͷใΛϩάʹग़ྗ(-XX:+PrintCompilation) 2. JITίϯύΠϥΛΘͳ͍(-Djava.compiler=none) 3. JITWatch (https://github.com/AdoptOpenJDK/ jitwatch)
Garbage Collection ϝϞϦͷׂΓͯɾղ์ΛࣗಈԽ ϝϞϦϦʔΫΛࢭ ͋ΔఔϦιʔεΛඞཁͱ͢Δ
GC͕ʹͳΔέʔε
جຊతͳGCΞϧΰϦζϜ ࢀরΧϯτ ίϐʔGC ϚʔΫɾΞϯυɾεΠʔϓ
JVMͰ͑ΔGC γϦΞϧGC ύϥϨϧGC CMS G1GC ZΨϕʔδɾίϨΫλ
γϦΞϧGC ੈผGC YoungɿϚʔΫɾίϯύΫτ(ίϐʔGC?) OldɿϚʔΫɾίϯύΫτ γϯάϧεϨουڥͰ࠷ޮ͕ྑ͍ ̍̌̌MBҎԼͷڥͰϚϧνεϨουͰޮ͕ྑ͍
ύϥϨϧGC γϦΞϧGCΛฒߦॲཧͰ͖ΔΑ͏ʹͨ͠ͷ ϚϧνεϨουڥͰStop the WorldʹΑΔఀࢭ࣌ؒ ཁ͕݅ͳ͍߹࠷ޮ͕ྑ͍
CMS ύϥϨϧGCͷOld෦ΛϚʔΫɾίϯύΫτ͔ΒίϯΧϨϯτɾϚʔΫɾεΠʔϓ ʹมߋͨ͠ͷ ΞϓϦέʔγϣϯͷಛੑʹ߹ͬͨύϥϝʔλઃఆͰ΄ͱΜͲFull GCΛൃੜͤͣ͞ʹ ӡ༻͢Δ͜ͱՄೳ ఀࢭ࣌ؒώʔϓαΠζʹൺྫ Stop the WorldΛ͏Full
GC͕ൃੜ͢Δ݅ OldྖҬͷஅยԽ͕ਐΜͩͱ͖ ϝϞϦར༻͕ϚʔΫΞϯυεΠʔϓʹΑΔղ์Λ্ճͬͯྖҬ͕Γͳ ͘ͳͬͨ࣌
G1GC Ϧʔδϣϯ୯ҐͷੈผGC ఀࢭ͕࣌ؒώʔϓαΠζʹൺྫ͠ͳ͍ Ұ࣌ఀࢭͷඪ࣌ؒΛઃఆ͢Δͱ౷ܭใ͔Βదͨ͠ύϥϝʔλΛબͯ͘͠Ε Δ Stop the WorldΛ͏Full GC͕ൃੜ͢Δ݅ concurrent
mode failureͷൃੜ ঢ֨ɾҠಈͷࣦഊ ڊେΦϒδΣΫτͷׂΓͯͷࣦഊ
ZGC ڊେͳώʔϓ(ςϥόΠτ)ͰϨΠςϯγ(̍̌mඵ ະຬ) ੈཧ͠ͳ͍ɾϦʔδϣϯܕͷϝϞϦཧ ฒྻίϯύΫγϣϯ
ࢀߟࢿྉ Java Garbage Collection Basics JDKπʔϧͱϢʔςΟϦςΟ Introduction to JIT Compiler
in JVM Understanding jvm gc advanced HotSpot Virtual MachineΨϕʔδɾίϨΫγϣϯɾνϡʔχϯάɾΨΠυ G1GC G1GCνϡʔχϯά ͬ͘͟ΓΘ͔ͬͨؾʹͳΔϞμϯGCೖ