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
80
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scalaエンジニアなら知っておきたいJVMの話
Javaを経由しないでScalaにはいっちゃった人向けにJavaやJVMについて基礎的な話をしました。
Ryuhei Ishibashi
July 02, 2021
More Decks by Ryuhei Ishibashi
See All by Ryuhei Ishibashi
QA素人がゼロからQA組織を立ち上げるno
rysh
0
170
Essential Refactoring for Scala with IDE
rysh
0
37
Other Decks in Programming
See All in Programming
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
200
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
継続モナドとリアクティブプログラミング
yukikurage
3
620
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
320
関数型プログラミングのメリットって何だろう?
wanko_it
0
180
yield再入門 #phpcon
o0h
PRO
0
670
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
600
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
150
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
520
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
共通化で考えるべきは、実装より公開する型だった
codeegg
0
260
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
Navigating Weather and Climate Data
rabernat
0
390
How to Ace a Technical Interview
jacobian
281
24k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Git: the NoSQL Database
bkeepers
PRO
432
67k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
The agentic SEO stack - context over prompts
schlessera
0
850
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ೖ