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.2k
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.9k
私が考える理想の開発チーム
sammy7th
0
550
ビジネスルールを軸とした ソフトウェア開発手法 「CCSR」
sammy7th
7
2.4k
お家に居れなくなって 3週間ゲストハウス暮らしをしていた話
sammy7th
2
450
家で仕事中にインターフォンに気づかず困っているのでIoTでなんとかしたい
sammy7th
1
130
ホットサンドメーカーで作るスイーツ
sammy7th
0
220
JVM入門 -Javaプログラムが動く仕組み-
sammy7th
35
13k
Udemyでプログラミング の動画講座を販売してみた
sammy7th
1
770
Git運用基礎
sammy7th
1
250
Other Decks in Programming
See All in Programming
ROS 2のZenoh対応とZenohのROS 2対応
takasehideki
2
290
ACES Meet におけるリリース作業改善の取り組み
fukucheee
0
130
学生の時に開催したPerl入学式をきっかけにエンジニアが組織に馴染むために勉強会を主催や仲間と参加して職能間の境界を越えていく
ohmori_yusuke
1
130
Infrastructure as Code でセキュリティを楽にしよう!
konokenj
6
1.4k
DevFest Android in Korea 2024 - 안드로이드의 문단속 : 앱을 지키는 암호화 이야기
mdb1217
1
140
AWS CDKを用いたセキュアなCI/CDパイプラインの構築 / Build a secure CI/CD pipeline using AWS CDK
seike460
PRO
3
600
VS Code extension: ドラッグ&ドロップでファイルを並び替える
ttrace
0
160
[KR] Server Driven Compose With Firebase
skydoves
2
180
CSC509 Lecture 01
javiergs
PRO
1
210
実践Dash - 手を抜きながら本気で作るデータApplicationの基本と応用 / Dash for Python and Baseball
shinyorke
2
260
Iteratorでページネーションを実現する
sonatard
3
710
perl for shell, awk and sed programmers
mackee
1
660
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
509
110k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.6k
Code Reviewing Like a Champion
maltzj
519
39k
Building Your Own Lightsaber
phodgson
102
6k
Six Lessons from altMBA
skipperchong
26
3.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Faster Mobile Websites
deanohume
304
30k
Typedesign – Prime Four
hannesfritz
39
2.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
24
1.7k
How STYLIGHT went responsive
nonsquared
95
5.1k
Being A Developer After 40
akosma
84
590k
Making the Leap to Tech Lead
cromwellryan
130
8.8k
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
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠