ibm jdk 1.5デフォルトのgcポリシーはパフォーマンスが悪い

1315 ワード

ibm jdk 1.5デフォルトのgcポリシーはパフォーマンスが悪い
ここ数日エンジンの性能をテストして、1つの単表でcaseを検索して、テストした結果は210 tpsで、cpuも正常で、85%ぐらいで、疑いもありません.
後で再度テストする時、gc logをプラスして、gc分析ツールでgcのスループットを分析して、スループットがとても低くて、意外にも77%ぐらいしかなくて、とてもおかしくて、gcログを見て、すべてglobal gcで、gc策略に問題があることを疑って、資料を調べて、次の文章を参考にしました:
http://www.ibm.com/developerworks/cn/java/j-ibmjava2/
デフォルトのgcポリシーは、スループットの最適化:-Xgcpolicy:optthruputであり、スループットが短いGC停止よりも重要なアプリケーションでは、通常、このポリシーが使用されます.ごみ収集を行うたびに、アプリケーションが停止します.
 
他のいくつかのgc戦略を抜きます.
他のGCポリシーに切り替えた理由
理由に切り替えoptavgpause
  • 私のアプリケーションはそんなに長いGC停止時間に耐えられません.GC停止時間が減少すれば、性能の低下も許容できる.
  • 私のアプリケーションは64ビットプラットフォームで実行され、3 GBまたは4 GBを超える非常に大きなスタックを使用しています.
  • 私のアプリケーションはGUIアプリケーションで、ユーザーの応答時間に注目しています.
  • gencon
  • 私のアプリケーションには、短期的に生存する多くのオブジェクトが割り当てられています.
  • スタックの空間が断片化した.
  • 私のアプリケーションはトランザクションベースです(つまり、トランザクションがコミットされた後、トランザクション内のオブジェクトは生存しません).
  • subpool
  • 大規模なマルチプロセッサコンピュータで、伸縮性の問題に遭遇しました.

  •  
    genconポリシーを試してみると、hoho、いいやつ、テストcaseのスループットは290 tps(直接40%アップ)に上昇し、大げさすぎてgcスループットも98%に上昇し、以前1.4の時に世代分けのgcポリシーがなかったことを覚えています.また、ibm jdkは世代分けせず、世代分けメカニズムを導入した後、デフォルトのoptthruputポリシーが複雑になったという印象があります.以前ほど効率的ではありません.
     
    ここでも目を覚ましてibm jdk 1.5のgc戦略に気をつけて、gc効率が低いことに気づいたときにgenconに切り替えて、大きなサプライズがあるかもしれません!