Tuning Java SE for Throughput and Latency #java_tune
正確にはステッド停止処理には、 “@sugarlife: Serial GCのSTW(Stop The World)は、VMThread上で、SafepointSynchronizeという処理を行う。 #java_tune”
2012-06-06 15:38:18Parallel GCはYoungのみマルチスレッドでGC。Parallel Old GCはOldも含めてマルチスレッドでGC。 #java_tune 紛らわしい名前…
2012-06-06 15:43:49CMSはInitial MarkとRemarkでStop The World. -XX:+PrintGCDetailsで確認できる #java_tune
2012-06-06 15:50:04このConcurrent Mode Failureは結構時間かかるので厄介ですね "@btnrouge: CMSは遅いけどpauseは小さい。ただし先にOldが埋まるとFull GCの罠。 #java_tune"
2012-06-06 16:06:33G1のCMSとの大きな違いはCompacting,Improved East-Of-Use,Predictable(although not hard real-time) #java_tune
2012-06-06 16:08:41GCのBestは小さなオーバヘッド、小さなポーズ時間、効率的なメモリの利用。これらのうち2つの特性を選ばないといけない。 #java_tune
2012-06-06 16:14:28java -XX:+PrintFlagsFinal -version | grep "PermSize" #java_tune
2012-06-06 16:23:57-Xms等と同じように-XX:PermSizeと-XX:MaxPermSizeは同じ値にする。Perm領域のサイズが変更(growing/shrinking)する際にFullGCが発生するため。 #java_tune
2012-06-06 16:26:16-Xmnを設定すると、-XX:NewSizeと-XX:MaxNEwSizeが同じ値に設定される。 #java_tune
2012-06-06 16:27:07Fragmentation:断片化して割当を満たす空きチャンクがない。割当サイズの丸め上げで場所が無駄になるの2タイプある。 #java_tune
2012-06-06 16:43:09CMSをつかうとデフォルトでClassはあんロードされない -XX:++CMSClassUnloadingEnabledと-XX:+PermGenSweepingEnabledを設定しないといけない #java_tune
2012-06-06 16:47:54CMSのクラスアンロードは 6u4からは -XX:+CMSClassUnloadingEnabledのみでよい #java_tune
2012-06-06 16:49:01GC解析ではOnlineではVisualVM、VisualGCを、OfflineではGC Logging, GCHisto+PrintGCStats, その他 GCViewer などの3rdParty製を利用 #java_tune
2012-06-06 17:01:206u4から-XX+PrintGCDataStampsを使うといい。JVM起動時からのミリセコンド秒表示がカレンダー型で表示されるようになる。 #java_tune 6u4からだったのは(具体的なマイナー番号を)知らなかった。
2012-06-06 17:23:19-d32/64はSolaris版などJDK/JRE homeが両方の実行環境を含む場合のみ。 #java_tune
2012-06-06 17:24:4132GBより大きいヒープでは参照がポインタ(8byte)になるたm,CompressedOopsよりスペースの面でオーバヘッドがある。 #java_tune
2012-06-06 17:25:37GCの選択。最初はParallelOldGC。Latencyが重要な場合などは CMS or G1 。メモリ使用量が小さい場合はSerial GCを検討。 #java_tune
2012-06-06 17:28:31