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.3k
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
2k
私が考える理想の開発チーム
sammy7th
0
620
ビジネスルールを軸とした ソフトウェア開発手法 「CCSR」
sammy7th
7
2.5k
お家に居れなくなって 3週間ゲストハウス暮らしをしていた話
sammy7th
2
490
家で仕事中にインターフォンに気づかず困っているのでIoTでなんとかしたい
sammy7th
1
160
ホットサンドメーカーで作るスイーツ
sammy7th
0
250
JVM入門 -Javaプログラムが動く仕組み-
sammy7th
35
14k
Udemyでプログラミング の動画講座を販売してみた
sammy7th
1
840
Git運用基礎
sammy7th
1
270
Other Decks in Programming
See All in Programming
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
160
Ruby's Line Breaks
yui_knk
3
1.8k
The Nature of Complexity in John Ousterhout’s Philosophy of Software Design
philipschwarz
PRO
0
140
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
130
カオスに立ち向かう小規模チームの装備の選択〜フルスタックTSという装備の強み _ 弱み〜/Choosing equipment for a small team facing chaos ~ Strengths and weaknesses of full-stack TS~
bitkey
1
120
REALITY コマンド作成チュートリアル
nishiuriraku
0
110
AIコーディングの理想と現実
tomohisa
33
35k
プロダクト横断分析に役立つ、事前集計しないサマリーテーブル設計
hanon52_
2
490
Lambda(Python)の リファクタリングが好きなんです
komakichi
3
220
AI時代の開発者評価について
ayumuu
0
220
Qiita Bash
mercury_dev0517
2
210
Laravel × Clean Architecture
bumptakayuki
PRO
0
120
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
31
8.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
The Cult of Friendly URLs
andyhume
78
6.3k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Rebuilding a faster, lazier Slack
samanthasiow
81
8.9k
Producing Creativity
orderedlist
PRO
344
40k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
Become a Pro
speakerdeck
PRO
28
5.3k
Designing for Performance
lara
608
69k
Building an army of robots
kneath
305
45k
Agile that works and the tools we love
rasmusluckow
329
21k
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
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠