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.4k
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
2.1k
私が考える理想の開発チーム
sammy7th
0
680
ビジネスルールを軸とした ソフトウェア開発手法 「CCSR」
sammy7th
7
2.6k
お家に居れなくなって 3週間ゲストハウス暮らしをしていた話
sammy7th
2
510
家で仕事中にインターフォンに気づかず困っているのでIoTでなんとかしたい
sammy7th
1
200
ホットサンドメーカーで作るスイーツ
sammy7th
0
300
JVM入門 -Javaプログラムが動く仕組み-
sammy7th
35
14k
Udemyでプログラミング の動画講座を販売してみた
sammy7th
1
890
Git運用基礎
sammy7th
1
290
Other Decks in Programming
See All in Programming
クラウドに依存しないS3を使った開発術
simesaba80
0
230
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2k
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
1
3k
Architectural Extensions
denyspoltorak
0
130
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
590
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
130
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
190
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
1.1k
SQL Server 2025 LT
odashinsuke
0
160
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.5k
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
3
1.7k
Implementation Patterns
denyspoltorak
0
170
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.7k
Deep Space Network (abreviated)
tonyrice
0
34
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
250
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
1k
Leo the Paperboy
mayatellez
3
1.3k
Between Models and Reality
mayunak
1
170
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
New Earth Scene 8
popppiees
1
1.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
The Pragmatic Product Professional
lauravandoore
37
7.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠