JVM MEMORY


                         
            
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
New领域(寿命が短いオブジェクト)=Eden领域(newによって作成されたばかりのオブジェクト) + Survivor领域(1回以上のGCの対象になり,回収されなかったオブジェクト)
Tenured領域(寿命が長いオブジェクト)         
             
•CopyGC Eden領域とSurvivor領域を対象にしたGCです        
•FullGC Tenured領域も含む,JavaVM固有領域全体を対象にしたGCです      
             
             
            
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
Survivor領域 =from空間+To空間。From空間とTo空間は,同じメモリサイズです。     
             
1.Eden領域およびSurvivor領域のFrom空間にあるJavaオブジェクトのうち,使用中のJavaオブジェクトが,Survivor領域のTo空間にコピーされます。使用されていないJavaオブジェクトは破棄されます。
2.Survivor領域のTo空間とFrom空間が入れ替わります。        
             
この結果,Eden領域とTo空間は空になり,使用中のオブジェクトはFrom空間に存在することになります。    
             
             
            
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
オブジェクトの退避が発生した場合,Tenured領域に本来格納されないはずの寿命の短いオブジェクトが格納されます。  
これが繰り返されると,CopyGCで回収されるはずのオブジェクトがメモリ空間に残っていくため,Javaヒープのメモリ使用量が増加していき,最終的にはFullGCが発生します。
             
             
            
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
      






       
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 JavaVMメモリ空間のサイズや割合などを指定するJavaVMオプション  
     
  項番 オプション名 オプションの意味 Default
  1 -Xmx<size> Javaヒープの最大サイズを設定します。 java -XX:+PrintFlagsInitial | grep InitialHeapSize -> 0
  2 -Xms<size> Javaヒープの初期サイズを設定します。 java -XX:+PrintFlagsInitial | grep MaxHeapSize -> 130862280
  3 -XX:MaxMetaspaceSize=<size> Metaspace領域の最大サイズを設定します。 java -XX:+PrintFlagsInitial | grep MaxMetaspaceSize -> 18446744073709551615
  4 -XX:MetaspaceSize=<size> Metaspace領域の初期サイズを設定します。 java -XX:+PrintFlagsInitial | grep MetaspaceSize -> 21810376
  5 -Xmn<size> New領域の初期値および最大値を設定します。

 -Xmn1024m 
=-XX:NewSize==-XX:MaxNewSize==1024m

(1.4or lator)

-XX:NewSize
设置年轻代大小(for 1.3/1.4)    
-XX:MaxNewSize 年
轻代最大值(for 1.3/1.4)
http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#gc_pause
 
  6 -XX:[+|-]HitachiAutoExplicitMemory 自動配置機能を使用する場合に,JavaVMを起動したタイミングでExplicitメモリブロックで使用するメモリを確保します。  
  7 -XX:HitachiExplicitHeapMaxSize=<size> Explicitヒープ領域サイズの最大サイズを設定します。  
  8 -Xss<size> 1スタック領域の最大サイズを設定します。  
  9 -XX:ReservedCodeCacheSize=<size> JavaVMが使用する領域のうち,コードキャッシュ領域の最大サイズを設定します。  
  10 -XX:NewRatio=<value> New領域に対するTenured領域の割合を設定します。  
  <value>が2の場合は,New領域とTenured領域の割合が,1:2になります。  
  11 -XX:SurvivorRatio=<value> Survivor領域のFrom空間とTo空間に対するEden領域の割合を設定します。 java -XX:+PrintFlagsInitial | grep SurvivorRatio -> 8
  <value>に8を設定した場合は,Eden領域,From空間,To空間の割合が,8:1:1になります。  
  12 -XX:TargetSurvivorRatio=<value> CopyGC実行後のSurvivor領域内でJavaオブジェクトが占める割合の目標値を設定します。  
  13 -XX:MaxTenuringThreshold=<value> CopyGC実行時に,From空間とTo空間でJavaオブジェクトを入れ替える回数の最大値を設定します。  
  設定した回数を超えて入れ替え対象になったJavaオブジェクトは,Tenured領域に移動されます。  
     
     
     
 Eden領域   
 newによって作成されたJavaオブジェクトが最初に格納される領域です。  
     
 Survivor領域   
 New領域に格納されていたJavaオブジェクトのうち,CopyGC実行時に破棄されなかったJavaオブジェクトが格納される領域です。Survivor領域は,From空間とTo空間で構成されます。From空間とTo空間のサイズは同じです。
     
 Tenured領域   
 長期間必要であると判断されたJavaオブジェクトが格納される領域です。Survivor領域で指定回数を超えてCopyGCの実行対象となり,破棄されなかったJavaオブジェクトが,この領域に移動されます。
     
 Metaspace領域   
 ロードされたclassなどの情報が格納される領域です。  
 ただし,圧縮オブジェクトポインタ機能が有効な場合,Metaspace領域内にCompressed Class Spaceという領域が作成されます。この領域に,Javaヒープ内のオブジェクトから参照されるクラス情報が配置されます。そして,それ以外のメソッド情報などがCompressed Class Space以外のMetaspace領域に配置されます。圧縮オブジェクトポインタ機能については,マニュアル「アプリケーションサーバ 機能解説 保守/移行編」の「9.18 圧縮オブジェクトポインタ機能」を参照してください。
     
     
     
 参考資料 http://itdoc.hitachi.co.jp/manuals/link/cosmi_v0970/03Y0460D/EY040136.HTM 
     
 
         
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      
 本番環境では基本的に従来のMaxPermanentSizeと同様に設定すべきだろう。   
 特に、独自のクラスローダを実装しており、且つこれらのクラスローダにメモリリークの疑いがある場合、パラメータ「-XX:MaxMetaspaceSize」を指定するべきだ。
      
 Metaspaceは魔法の領域ではない。従来発生していたメモリリークが解消される訳ではないのだ。  
 クラスローディングのメモリリークが疑われる環境では、従来のPermanent領域の上限値が、ある種の”ストッパー”の役割を果たしてきた。
 Metaspaceではこのストッパーが存在しないため、無尽蔵にリークされた領域が広がっていく恐れがある。こういった環境では上限値(-XX:MaxMetaspaceSize)を明示的に設定すべきだろう。
      
 とはいうものの、個々の開発環境では、当領域を意識する頻度は下がると思われる。  
 Metaspace内に格納される情報はクラスおよびメソッドのメタ情報であり、結局の所、これらは”アプリケーションを動かすために必須な情報”である。
 上限値を設定したとしても、領域が不足するようであれば、領域を拡張せざるを得ない。Metaspaceは自動的に伸張されるため、個々の開発者の環境では特段注意を払って設定する必要は無いだろう。
      
      
 Permanent領域とMetaspace領域を比較   
      
  比較項目 Permanent領域 Metaspace領域  
  1.領域の取り扱い ヒープの一種 ネイティブメモリ  
  2.デフォルトの最大容量 環境依存だが60〜80MByte程度 無尽蔵  
  3.サイズ調整用Javaパラメータ -XX:PermSize -XX:MetaspaceSize  
  -XX:MaxPermSize -XX:MaxMetaspaceSize  
  4.格納する情報 クラス/メソッド クラス/メソッド  
  static変数  
  定数や文字列のintern表現(〜Java6まで)  
  5.ガーベッジコレクトの有無 有(FullGC対象) 有(FullGC対象)  
      
      
 参考資料 http://equj65.net/tech/java8hotspot/#vmdescript   
      
      
   
      
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值