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
67
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
150
Essential Refactoring for Scala with IDE
rysh
0
31
Other Decks in Programming
See All in Programming
CSC307 Lecture 01
javiergs
PRO
0
690
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
MUSUBIXとは
nahisaho
0
140
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
組織で育むオブザーバビリティ
ryota_hnk
0
180
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
AI時代の認知負荷との向き合い方
optfit
0
160
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
SourceGeneratorのススメ
htkym
0
200
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
990
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Designing for humans not robots
tammielis
254
26k
Amusing Abliteration
ianozsvald
0
100
Thoughts on Productivity
jonyablonski
74
5k
A better future with KSS
kneath
240
18k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
The SEO Collaboration Effect
kristinabergwall1
0
350
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Being A Developer After 40
akosma
91
590k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
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ೖ