2012年04月19日
Permanent領域のメモリチューニング
Permanent領域の情報って、少ないですよね。
最近、Perm関連でのトラブルがあって、ちょくちょく調べていましたが、今後のためにメモっておきます
○Permが増加する
Permには、クラス情報などがロードされるわけですが、アプリケーションが動作している間に増加し続け、Full GCのタイミングである程度解放され、また増加・・・を繰り返す、というのがありました。
原因は特定できていませんが、リフレクションを使っていると、一定回数の呼び出しがあると、そのクラスをバイトコード化して、メモリに載せる(Permに格納する)という仕組みがあるそうです。このため、Permが動的に増加していく。で、使わないときにFullGCで解放されるが、またメモリに格納され・・・を繰り返すそう。
最初からPermに格納するオプションがあるそうで・・・忘れました。思い出したら書きます。
○PermはいつGCされる?
Perm領域のオブジェクトは、Full GCでないと回収されません。
では、Permのみが増える(NewやOldは変化しない)として、Full GCが発生する契機は設定できる?
100%になるときにはJVMが勝手にやりそうですが、例えば90%とかで発生させられるのか?
Permがいっぱいになったら、Full GCが動くようです。
「When the old or permanent generation fills up, what is known as a full collection (sometimes referred to as a major collection) is typically done. 」
→OldもしくはPermが一杯になったら、フルコレクション(メジャーコレクションとも呼ばれる)が実施される。
※フルコレクション=フルGC、メジャーコレクション=メジャーGCと呼びますね。
http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf?ssSourceSiteId=otnjp
あと、きっとこのへんを読むとわかる?
http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf?ssSourceSiteId=otnjp
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html
http://www.oracle.com/technetwork/java/faq-140837.html
それと、ちょっとメモ。
・JVMのオプションで、 -XX:+ TraceClassloading と -XX:+ TraceClassUnloading をつけると、クラスのロード・アンロードでログ出力される(コンソール出力?)。
○基本
Permの基本は、この記事が分かりやすいかと。
Permanent領域のチューニング
http://www.atmarkit.co.jp/fjava/rensai3/devedge06/devedge06_2.html
でも、これだけじゃ細かいところがわかりません。上記のリンクを読まないといけません。
ブログ一覧 |
Java | パソコン/インターネット
Posted at
2012/04/19 21:06:59
今、あなたにおすすめ