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
JVM入門 -メモリ管理編-
Search
Kinoko
July 18, 2019
Programming
15
4.1k
JVM入門 -メモリ管理編-
関ジャバ'19 7月度 - connpass
https://kanjava.connpass.com/event/134133/
登壇資料
Kinoko
July 18, 2019
Tweet
Share
More Decks by Kinoko
See All by Kinoko
自作キーボードにチャレンジしてみた。 ver 2.0
sammy7th
0
1.7k
私が考える理想の開発チーム
sammy7th
0
520
ビジネスルールを軸とした ソフトウェア開発手法 「CCSR」
sammy7th
7
2.3k
お家に居れなくなって 3週間ゲストハウス暮らしをしていた話
sammy7th
2
430
家で仕事中にインターフォンに気づかず困っているのでIoTでなんとかしたい
sammy7th
1
120
ホットサンドメーカーで作るスイーツ
sammy7th
0
210
JVM入門 -Javaプログラムが動く仕組み-
sammy7th
35
13k
Udemyでプログラミング の動画講座を販売してみた
sammy7th
1
730
Git運用基礎
sammy7th
1
240
Other Decks in Programming
See All in Programming
Secure Development with PHP
dbrumann
2
150
アプリケーションをリプレイスしたら チームとサービス運用に向き合えた
kazatohiei
1
280
K2のKotlin IDEプラグインの中を覗いてみよう♪
yanex
0
1.9k
Automatisiere deine Prozesse mit GitHub Actions!
ahus1
0
270
どこでも使える Cloudflare Workers!
codehex
6
470
Ruby の型に関する活動をやっている話 / Activities related to Ruby types
euglena1215
3
130
CSC307 Lecture 02
javiergs
PRO
0
270
ChecksでアプリコンプライアンスとAIの安全性をシンプルに - セッション紹介
takakitojo
0
190
iOS 開発で便利なツールたち
mitsuharu
0
140
ボトムアップではじめるFour Keys・SPACEを用いた開発プロセスの改善事例 〜開発生産性に向き合ってチームの成長を実感する〜
nomuson
1
240
データサイエンスやデータエンジニアリングの求人サイトの個人開発
billyio
0
580
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
6
1.3k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
78
5.4k
The Power of CSS Pseudo Elements
geoffreycrofte
63
5.1k
Music & Morning Musume
bryan
42
5.8k
Practical Orchestrator
shlominoach
184
9.9k
GitHub's CSS Performance
jonrohan
1025
450k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
Building Flexible Design Systems
yeseniaperezcruz
321
37k
Scaling GitHub
holman
457
140k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
19
7.1k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
27
2.4k
Into the Great Unknown - MozCon
thekraken
16
1.2k
Transcript
JVMೖ -ϝϞϦཧฤ- Abe Asami
ࣗݾհ "CF"TBNJl͖ͷࢠz େࡕͷϑϦʔϥϯεϓϩάϥϚ IUUQOPDPOPOFU !BBUI +BWB,PUMJO4DBMBͳͲͳͲ
࠷͍ۙͬͯΔ͜ͱ https://www.geekhub.jp/ ΤϯδχΞಛԽ߹ಉઆ໌ձΠϕϯτɻ࣍ճ 9/14() ։࠵༧ఆ ʮJava11ʹΑΔ WebΞϓϦέʔγϣϯ։ൃͰֶͿ Javaϓϩάϥϛϯάೖʯൢചத https://www.udemy.com/java11-springbootweb-java/
͜ͷςʔϚΛબΜͩཧ༝ • ਖ਼JVMͷ͜ͱงғؾͰ͔͠ཧղ͍ͯ͠ͳ ͍ͨΊɺษڧ͔͔ͨͬͨ͠Β • ӡ༻ϑΣʔζʹܞΘΔػձ͕গͳ͘ɺύ ϑΥʔϚϯεϝϞϦपΓͷτϥϒϧૺ۰ ܦݧ͕͋·Γͳ͍ɾɾɾ • ࠓϝϞϦཧͷ͚ͩͰ͢
ͦͦJVMͱ
Java VM (JavaԾϚγϯ) • JavaόΠτίʔυΛ࣮ߦ͢ΔͨΊͷԾڥ • OSґଘΛٵऩͯ͘͠Ε͍ͯΔ
JVMʹछྨ͕͋Δ • HotSpot VM, IBM JVM, JRockit, ͳͲͳͲ
ࠓճHotSpot VMͷ • Oracle͕ఏڙ͍ͯ͠ΔJVM
͋ͱࠓճJava8ͷͰ͢ • ͜ͷ͋ͱͷݕূͰͬͨͷ͕Java8
JVMͷΈ (ΊͬͪΌͬ͘͟Γ)
ϝϞϦߏ
None
None
None
None
None
None
None
None
None
None
None
࣮ࡍͷϓϩάϥϜͰ GCͷঢ়گΛղੳͯ͠ΈΔ
GCϩά • GCͷॲཧ࣌ؒલޙͷϝϞϦ༻ྔͳͲͷϩ ά
GCViewer • GCϩάͷϏϡʔΞʔ • https://github.com/chewiebug/GCViewer • 2019/07/18 ݱࡏɺJDK11ະରԠ
ͱΓ͋͑ͣɺ ͳΜ͔͠Βಈ͔ͯ͠ GCϩάΛग़ͯ͠ΈΔ
ࢀর͕Βͳ͍ΠϯελϯεΛ ͻͨ͢Βੜ
࣮ߦ java -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps Main GCϩάग़ྗͷͨΊͷΦϓγϣϯ (※ඪ४ग़ྗʹग़͚ͩ͢Ͱ͋Ε -verbose:gc
͚͚ͩͭΕOK)
ग़ྗ͞Εͨϩά
GCViewerͰ։͍ͯΈΔ
ΦϒδΣΫτ·ͣYoungྖҬʹ࡞ΒΕɺ ੜ͔Β͕࣌ؒܦͭͱOldྖҬʹҠಈ͢Δ
ࠓճOldྖҬͷҠಈ͕ൃੜ͠ͳ͍ͨΊ ώʔϓશମͷ༻ྔ ≒ YoungྖҬͷώʔϓ༻ྔ
GC࣌ʹͪΌΜͱϝϞϦ͕ղ์͞Ε͍ͯΔ
ϚΠφʔGCɾɾɾYoungྖҬͷΈ͕ର YoungྖҬ͕ ͍ͬͺ͍ʹͳͬͨ λΠϛϯάͰ ϚΠφʔGC͕ ࣮ߦ͞Ε͍ͯΔ
͏1ύλʔϯ ࢼͯ͠ΈΔ
ࢀর͕ΔΠϯελϯεΛ ͻͨ͢Βੜ
GCϩά
͜ΕGCViewerͰ։͍ͯΈΔ
None
Full GC (ϝδϟʔGC)ɾɾɾશώʔϓྖҬ͕ର
Full GC͕͔͔࣌ؒΔ 2019-07-18T07:28:35.759-0900: 53.145: [GC (Allocation Failure) [PSYoungGen: 1153507K->190965K(1768960K)] 1400776K->506242K(2118656K),
0.3026525 secs] [Times: user=2.55 sys=0.14, real=0.31 secs] 2019-07-18T07:28:36.064-0900: 53.450: [Full GC (Ergonomics) [PSYoungGen: 190965K->190932K(1768960K)] [ParOldGe 315276K->290297K(610816K)] 506242K->481229K(2379776K), [Metaspace: 2676K->2676K(1056768K)], 4.7517463 secs] [Times: user=29.92 sys=0.06, real=4.75 secs] ্ͷϚΠφʔGC ɾɾɾ 0.31 secs ԼͷFull GC ɾɾɾ 4.75 secs
GCதΞϓϦέʔγϣϯ εϨου͕ࢭ·Δ Stop the World (STW) ͱݺΕΔ
OutOfMemoryError(OOME) Λൃੜͤͯ͞ΈΔ
ώʔϓͷ࠷େαΠζΛมߋ ͯ͠ΈΔ % java -Xms600m -Xmx800m -Xloggc:gc.log -XX:+PrintGCDetails -XX: +PrintGCDateStamps
Main -Xms ɾɾɾώʔϓͷॳظαΠζ -Xmx ɾɾɾώʔϓͷ࠷େαΠζ
ແࣄ(?) OOMEൃੜ
GCϩά
͏ͪΐͬͱৄ͘͠ղੳΛ ͯ͠ΈΔ
ώʔϓμϯϓ • ಛఆͷ࣌ࠁʹώʔϓʹؚ·ΕΔͯ͢ͷΦϒ δΣΫτͷεφοϓγϣοτ
OOMEൃੜ࣌ʹώʔϓμϯϓΛ ग़ྗͤͯ͞ΈΔ java -Xms600m -Xmx800m -Xloggc:gc.log -XX:+PrintGCDetails -XX: +PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError
Main -XX:+HeapDumpOnOutOfMemoryError ɾɾɾ OOMEൃੜ࣌ʹώʔϓμϯϓΛग़ྗ
The Eclipse Memory Analyzer • Eclipse Memory Analyzer Open Source
Project | The Eclipse Foundation https://www.eclipse.org/mat/ • ώʔϓμϯϓΛ͍͍ײ͡ʹදࣔͯ͘͠ΕΔGUI πʔϧ
ώʔϓμϯϓΛ։͍ͯΈͨ
None
None
·ͱΊ • ͜͏͍ͬͨJVMͷجຊൃੜ࣌ͷղੳํ ๏Λ͓ͬͯ͘ͱɺ͍͟ͱ͍͏ͱ͖ʹ߄ͯͳ ͯ͘ศར(ଟ)
ͪͳΈʹJava11ͷσʔλੳʹ Java Mission ControlΛ͏ͱ͍͍ͦ͏Ͱ͢ • Java Mission Control https://www.oracle.com/technetwork/jp/
java/javaseproducts/mission-control/ index.html • ༗ঈػೳ͕ͩͬͨɺJava11͔ΒOpenJDKʹ دଃ͞Εͯແঈఏڙͱͳͬͨ
ࢀߟʹͨ͠ϖʔδ • OutOfMemoryError ͷௐํ - Qiita https://qiita.com/opengl-8080/items/ 64152ee9965441f7667b • JavaͲͷΑ͏ʹಈ͘ͷ͔ʙਤղͰΘ͔ΔJVMͷΈɿ࿈ࡌʛgihyo.jp
… ٕज़ධࣾ http://gihyo.jp/dev/serial/01/jvm-arc • ʮϝϞϦʔΛҙࣝͯ͠ΈΑ͏ʯୈ2ճɹGCͷΈΛཧղ͢Δ | ܦ xTECH ʢΫϩεςοΫʣ https://tech.nikkeibp.co.jp/it/article/COLUMN/ 20060612/240657/?rt=nocnt • ·͡ΊʹJVMνϡʔχϯά: ୈ1ճ ·ͣݱঢ়֬ೝ https://x1.inkenkun.com/ archives/367
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠