JavaのGCのチューニング

最近の@ITに「Javaのヒープ・メモリ管理の仕組み」という記事があるが,今時バージョンも書かずに,こういう記事を書くのはちょっとまずいだろう.一年前ならまだわかるが….

http://www.atmarkit.co.jp/fjava/rensai3/devedge03/devedge03_1.html

確かに,昔1.4が出た時には,この辺のチューニングに苦労したし,チューニング結果が性能向上に結びついた.Sun Microsystemsも,1.3のころからパフォーマンスチューニングに本格的に取り組んだようで,その成果が1.4で出ていたのだが,実際やってみるとあまりにもチューニングが面倒だったので,来日したエンジニアに「もっと簡単にならないのか?」と質問したら,「自動調整を検討中だ」という回答だった.

その発言通りに,5.0ではチューニングのアプローチがBehavior based tuningに変わっており,基本的には最大停止時間とスループットの目標値を与えることになる.逆に,この記事で解説されたようなフットプリントの目標値は自動調整される.これに伴い,昔のようにコマンドラインで試行錯誤する必要性が減っているのだ(…本当か?(笑)).

少なくとも5.0で仕事をしている人は,"Ergonomics in the 5.0 Java Virtual Machine"と”Tuning Garbage Collection with the 5.0 Java Virtual Machine”の方を読むべし.

http://java.sun.com/docs/hotspot/gc5.0/ergo5.html
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

(と書いていても,私もまだ実行したわけではないのだが(笑)何か新しい知見があれば,ぜひ教えて欲しい.)

追記:そういえば,「OSSの性能・信頼性評価/障害解析ツール開発」の評価では,この辺のパラメータは一切いじってなかった(JRockItは自動調節)ので,その辺も効いている可能性があるなあ.