http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
1.4と1.5では-Xinggcで使用するGCが違う
1.4 TrainGC
1.5 ConcMarkSweepGC
1.5以降でTrainGCを使いたい場合は -XX:+UseTrainGC
http://d.hatena.ne.jp/masanobuimai/20070821
とは言え,多少なりとも良くなるんだったらと思い,VMの設定をこんな具合に変えてみた。 -Xms256m -Xmx386m -XX:NewSize=128m -XX:MaxNewSize=256m -XX:MaxPermSize=96m -Xincgc 何が悲しくて,こんなことせにゃならんのかと思いつつも,YourKitでモニタリングしながらIDEAを使ってみたら,ヒープの消費量やGCは随分改善されたぞ(それも体感できるほどに,だ)。 #インクリメンタルGCも使ってみるモンだな。
http://java-house.jp/ml/archive/j-h-b/051099.html#body
From: takamure@netstar-inc.com (Takamure, Naoki) Subject: [JavaHouse-Brewers:51093] sun jre1.4.0 で Xincgc オプションの指定について Date: Mon, 9 Sep 2002 00:17:39 JST Message-ID: <002101c2574b$4e709540$4c32a8c0@netstar.co.jp> > しています。jre1.4.0でXincgcを指定すると、メモリ使用量が > 抑えられると思い、アプリケーションに負荷をかけ、 > すると、Xincgcを付けない方がメモリ使用量が増えないように > 思えます。私の理解が誤っていたのでしょうか?もし、これに それは間違って理解していると思います. HotSpotのホワイトペーパーに,Incremental "Pauseless" Garbage Collector と書いてあるように,GC時の停止時間をほぼ10ミリ秒以下に抑えることができ る(ただし最大停止時間の保証はしません)のが特徴のようです. http://java.sun.com/products/hotspot/docs/whitepaper/Java_HotSpot_WP_Final_4_30_01.html#pgfId=1082247 結局,現在のHotspot VMでは,デフォルトで世代別コピー式GCを使用していて, 多くのオブジェクトは短命なので,高速にGCをおこなえるのですが,問題は旧 世代に殿堂入りしたオブジェクトのGCがマーク&コンパクト方式で,非常に遅 いことです. そこで,停止時間の問題が発生する場合を考慮して,HotSpot VMでは, -Xincgcを指定した時に,旧世代(old generation)をTrain アルゴリズムを用い て管理するようになるようです. このTrainアルゴリズムの論文は, ftp://ftp.cs.umass.edu/pub/osl/papers/iwmm92.ps.Z にあり,簡単な説明は, http://cs.haifa.ac.il/courses/java/gc.pdf にあります. 実際に,HotSpot VMがどのようにメモリを管理しているかは,次のドキュメン トの図を見ればわかります. Tuning Garbage Collection with the 1.3.1 JavaTM Virtual Machine http://java.sun.com/docs/hotspot/gc/index.html これを見れば,まず新世代(young generation)と旧世代(old generation)に大 きく分割され,さらに各世代が細かく分割されています. 結局,基本的には,スループット,停止時間,フットプリントという3つの要 素について考慮すると,スループット(インクリメンタルGCは停止時間は短く ても,総合的に見ると遅いことに注意)とフットプリントの点ではデフォルト のGC方式の方が,停止時間の点では-Xincgcを指定した方が有利だと思います. ただし,ヒープの最大2GBという制約がなくなりつつある昨今,フットプリン トは致命的なものではなくなりつつありますし,上記及び下記のドキュメント を見ればわかるように,パラメータチューニングも可能です. FREQUENTLY ASKED QUESTIONS ABOUT THE JAVATM HOTSPOT VIRTUAL MACHINE http://java.sun.com/docs/hotspot/PerformanceFAQ.html JavaTM HotSpot VM Options http://java.sun.com/docs/hotspot/VMOptions.html 結局は,まず性能のどの要素を重視するかを考えてGC方式を選ぶことと,さら にパラメータチューニングをおこなって性能を引き出してやることが重要です. 実際に,パラメータチューニングによって,実行性能が劇的に変化することが ありますので,特にJavaプログラムの実行性能の点で困っている方は,まず上 記ドキュメントを熟読することをお薦めします. たとえば,新世代のサイズが小さく,殿堂入りが早すぎ,そのために実行性能 が落ちることがありますが,この場合は-Xincgcを指定するよりも, -XX:MaxNewSizeや-XX:NewRatioなどのオプションを調節する方がよいこともあ ります. 他に,フットプリントが多すぎる場合には,これらのオプションを調節して, 使用しないメモリ領域を削ることも可能でしょう. # GCの専門家ではないので間違いがあるかもしれませんので,その場合は補 # 足してください. 風間 一洋 (kazama@ingrid.org) NTT Network Innovation Laboratories