<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[JavaVMのメモリ管理]]></title><description><![CDATA[<p>このトピックでは、JavaVMのメモリ管理の仕組を取り上げて説明します。</p><h2 class="sectionedit4 page-header" id="メモリ領域の構成">メモリ領域の構成<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#%E3%83%A1%E3%83%A2%E3%83%AA%E9%A0%98%E5%9F%9F%E3%81%AE%E6%A7%8B%E6%88%90"></a></h2><div class="level2"><p><a href="http://nwjava.insidekb.jp/lib/exe/fetch.php/16/26/as_jvm_memory_01.jpg" class="media" target="_blank" title="16:26:as_jvm_memory_01.jpg"></a></p><img src="/assets/uploads/files/1569685426516-as_jvm_memory_01.jpg" /><p><a href="http://nwjava.insidekb.jp/lib/exe/fetch.php/16/26/as_jvm_memory_01.jpg" class="media" target="_blank" title="16:26:as_jvm_memory_01.jpg"><br /></a></p><p>JavaVMのメモリ構成はかきにようになります。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">OS固有領域</div><ul class="fix-media-list-overlap"><li class="level2"><div class="li">Cヒープ領域<br />JavaVM自身が使用する領域です。JNIで呼び出されたネイティブライブラリでも使用されます。</div></li><li class="level2"><div class="li">スタック領域<br />Javaスレッド毎に保持するスタックの領域です。</div></li></ul></li><li class="level1"><div class="li">JavaVM固有領域</div><ul class="fix-media-list-overlap"><li class="level2"><div class="li">Permanent領域<br />ロードされたclassなどの情報が格納される領域です。</div></li><li class="level2"><div class="li">Javaヒープ<br />JavaVM上で起動するJavaプログラムのリソースを管理する領域。New領域</div><ul class="fix-media-list-overlap"><li class="level3"><div class="li">New領域<br />新規オブジェクトと閾値（-XX:MaxTenuringThreshold）未満のオブジェクトが配置されます、Young領域とも呼ばれるます。</div><ul class="fix-media-list-overlap"><li class="level4"><div class="li">Eden領域<br />新規のオブジェクトが配置されます。</div></li><li class="level4"><div class="li">From領域<br />CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされます。</div></li><li class="level4"><div class="li">To領域<br />CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされます。</div></li></ul></li><li class="level3"><div class="li">Old領域<br />New領域で閾値（-XX:MaxTenuringThreshold）を超えたオブジェクトが配置されます、Tenured領域とも呼ばれるます。</div></li></ul></li></ul></li></ul></div><h2 class="sectionedit5 page-header" id="gc">GC<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#gc"></a></h2><div class="level2"></div><h3 class="sectionedit6" id="g種類">種類<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#g%E7%A8%AE%E9%A1%9E"></a></h3><div class="level3"><p>Javaでは、「Scavenge GC」と「Full GC」という2種類のガベージ・コレクションが実行されます。Scavenge GCはNEW領域のみを対象とした短時間で終了するガベージ・コレクションであり、頻繁に実施されます。一方、Full GCはNEWとOLD両方の領域を対象とした大がかりなガベージ・コレクションであり、比較的低い頻度で実施されます。<br /></p></div><h3 class="sectionedit7" id="タイミング">タイミング<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0"></a></h3><div class="level3"><p>以下のタイミングでGCが実施されます。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">ヒープメモリ中に新規オブジェクトを作成するために必要な空き領域が足りなくなったとき</div></li><li class="level1"><div class="li">プログラム中でSystem.gc()が実行されたとき</div></li><li class="level1"><div class="li">JavaVMで実行する処理がなくなってアイドル状態になったとき</div></li></ul><p>下記オプションで定期的なGCを設定することができます。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">-Dsun.rmi.dgc.server.gcInterval<br />JDK6デフォルト3600000（1時間））</div></li><li class="level6"><div class="li">-Dsun.rmi.dgc.client.gcInterval<br />JDK6デフォルト3600000（1時間））</div></li></ul></div><h2 class="sectionedit8 page-header" id="outofmemoryerror">OutOfMemoryError<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#outofmemoryerror"></a></h2><div class="level2"><p>メモリを割り当てる必要があるが、割り当てられるメモリが存在しないとき、OutOfMemoryErrorが発生します<br />例として、OutOfMemoryErrorが発生するケースを取り上げます。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">New領域が溢れた場合</div></li><li class="level3"><div class="li">Old領域が溢れた場合</div></li><li class="level3"><div class="li">参照されつづけるオブジェクトが大量に存在する場合に溢れる。</div></li><li class="level3"><div class="li">Cヒープが溢れた場合<br />Javaのスレッドが大量に作成された場合に溢れます、Cヒープが溢れてOutOfMemorryErrorが発生した場合、スタックトレースの先頭が「Native Method」です。<br />スレッド数はOSのパラメタで設定されており、それが大きな値で設定されている場合に発生します。</div></li></ul></div><p></p>]]></description><link>http://www.isummary.jp/topic/93/javavmのメモリ管理</link><generator>RSS for Node</generator><lastBuildDate>Mon, 08 Jun 2026 18:24:08 GMT</lastBuildDate><atom:link href="http://www.isummary.jp/topic/93.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Sep 2019 15:43:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to JavaVMのメモリ管理 on Sat, 28 Sep 2019 15:43:53 GMT]]></title><description><![CDATA[<p>このトピックでは、JavaVMのメモリ管理の仕組を取り上げて説明します。</p><h2 class="sectionedit4 page-header" id="メモリ領域の構成">メモリ領域の構成<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#%E3%83%A1%E3%83%A2%E3%83%AA%E9%A0%98%E5%9F%9F%E3%81%AE%E6%A7%8B%E6%88%90"></a></h2><div class="level2"><p><a href="http://nwjava.insidekb.jp/lib/exe/fetch.php/16/26/as_jvm_memory_01.jpg" class="media" target="_blank" title="16:26:as_jvm_memory_01.jpg"></a></p><img src="/assets/uploads/files/1569685426516-as_jvm_memory_01.jpg" /><p><a href="http://nwjava.insidekb.jp/lib/exe/fetch.php/16/26/as_jvm_memory_01.jpg" class="media" target="_blank" title="16:26:as_jvm_memory_01.jpg"><br /></a></p><p>JavaVMのメモリ構成はかきにようになります。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">OS固有領域</div><ul class="fix-media-list-overlap"><li class="level2"><div class="li">Cヒープ領域<br />JavaVM自身が使用する領域です。JNIで呼び出されたネイティブライブラリでも使用されます。</div></li><li class="level2"><div class="li">スタック領域<br />Javaスレッド毎に保持するスタックの領域です。</div></li></ul></li><li class="level1"><div class="li">JavaVM固有領域</div><ul class="fix-media-list-overlap"><li class="level2"><div class="li">Permanent領域<br />ロードされたclassなどの情報が格納される領域です。</div></li><li class="level2"><div class="li">Javaヒープ<br />JavaVM上で起動するJavaプログラムのリソースを管理する領域。New領域</div><ul class="fix-media-list-overlap"><li class="level3"><div class="li">New領域<br />新規オブジェクトと閾値（-XX:MaxTenuringThreshold）未満のオブジェクトが配置されます、Young領域とも呼ばれるます。</div><ul class="fix-media-list-overlap"><li class="level4"><div class="li">Eden領域<br />新規のオブジェクトが配置されます。</div></li><li class="level4"><div class="li">From領域<br />CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされます。</div></li><li class="level4"><div class="li">To領域<br />CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされます。</div></li></ul></li><li class="level3"><div class="li">Old領域<br />New領域で閾値（-XX:MaxTenuringThreshold）を超えたオブジェクトが配置されます、Tenured領域とも呼ばれるます。</div></li></ul></li></ul></li></ul></div><h2 class="sectionedit5 page-header" id="gc">GC<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#gc"></a></h2><div class="level2"></div><h3 class="sectionedit6" id="g種類">種類<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#g%E7%A8%AE%E9%A1%9E"></a></h3><div class="level3"><p>Javaでは、「Scavenge GC」と「Full GC」という2種類のガベージ・コレクションが実行されます。Scavenge GCはNEW領域のみを対象とした短時間で終了するガベージ・コレクションであり、頻繁に実施されます。一方、Full GCはNEWとOLD両方の領域を対象とした大がかりなガベージ・コレクションであり、比較的低い頻度で実施されます。<br /></p></div><h3 class="sectionedit7" id="タイミング">タイミング<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0"></a></h3><div class="level3"><p>以下のタイミングでGCが実施されます。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">ヒープメモリ中に新規オブジェクトを作成するために必要な空き領域が足りなくなったとき</div></li><li class="level1"><div class="li">プログラム中でSystem.gc()が実行されたとき</div></li><li class="level1"><div class="li">JavaVMで実行する処理がなくなってアイドル状態になったとき</div></li></ul><p>下記オプションで定期的なGCを設定することができます。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">-Dsun.rmi.dgc.server.gcInterval<br />JDK6デフォルト3600000（1時間））</div></li><li class="level6"><div class="li">-Dsun.rmi.dgc.client.gcInterval<br />JDK6デフォルト3600000（1時間））</div></li></ul></div><h2 class="sectionedit8 page-header" id="outofmemoryerror">OutOfMemoryError<a class="anchorjs-link " href="http://nwjava.insidekb.jp/doku.php/16/26/16#outofmemoryerror"></a></h2><div class="level2"><p>メモリを割り当てる必要があるが、割り当てられるメモリが存在しないとき、OutOfMemoryErrorが発生します<br />例として、OutOfMemoryErrorが発生するケースを取り上げます。</p><ul class="fix-media-list-overlap"><li class="level1"><div class="li">New領域が溢れた場合</div></li><li class="level3"><div class="li">Old領域が溢れた場合</div></li><li class="level3"><div class="li">参照されつづけるオブジェクトが大量に存在する場合に溢れる。</div></li><li class="level3"><div class="li">Cヒープが溢れた場合<br />Javaのスレッドが大量に作成された場合に溢れます、Cヒープが溢れてOutOfMemorryErrorが発生した場合、スタックトレースの先頭が「Native Method」です。<br />スレッド数はOSのパラメタで設定されており、それが大きな値で設定されている場合に発生します。</div></li></ul></div><p></p>]]></description><link>http://www.isummary.jp/post/93</link><guid isPermaLink="true">http://www.isummary.jp/post/93</guid><dc:creator><![CDATA[峯文]]></dc:creator><pubDate>Sat, 28 Sep 2019 15:43:53 GMT</pubDate></item></channel></rss>