私は現在の世代のJVMで動作するツールやユーティリティについては気づきません。
しかし、このようなユーティリティがどのように役立つかわかりません。
ヒープがいっぱいになっているため、長いGC時間が通常発生します。ヒープが100%いっぱいに近づくにつれて、GCで費やされる時間は指数関数的に増加する傾向があります。最悪の場合、ヒープは完全に塗りつぶされ、アプリケーションはOutOfMemoryError
になります。 2つの解決方法があります
どちらの場合も、メモリプロファイラを使用すると、問題の分析に役立ちます。しかし、どのオブジェクトが古い世代であるかを知る必要はありません。問題の根本的な原因または問題の解決には関係ありません。最適化するために、どのオブジェクトを作成知るために
私は、古い地域に残っている「生存者」であるオブジェクトを知りたいです。
これは少し意味があるようになっています。ある空間がどこに住んでいるのではなく、どのオブジェクトが長命であるかを知る必要があるように思えます。jhat
を使用してヒープスナップショットのシーケンスを比較することで可能です。 (良い方法があるかもしれません...)
しかし、私はまだこのアプローチが助けになるとは思わない。問題は、完全なGCがすべての到達可能な(ハード、ソフト、弱い、ファントム)オブジェクトをトラバースする必要があることです。また、30Gフルの32Gbヒープがある場合は、マーク/スイープ/リロケートするためのオブジェクトがまだたくさんあります。私は、ソリューションは、同時コレクタを使用し、アプリケーションのオブジェクト割り当て率に追いつくことができるようにチューニングすることが考えられます。
コードから直接System.gc()
に電話しているようですが、 しないでください!System.gc()
を呼び出すと、通常、JVMはフルガベージコレクションを実行します。それはかなりあなたに一時停止を保証されています。コレクタをいつ実行するかを決定するためには、JVMを離れる方がよいでしょう。
最後に、「オブジェクトの最適化」という言葉が何であるかは不明です。あなたはオブジェクト作成率を下げることを意味しますか?または、長寿命(キャッシュされたオブジェクト)の保持を管理するために何かを考えていますか?
[Visualvm](http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/intro.html)、[Visualgc](http://java.sun。 com/performance/jvmstat/visualgc.html)および[Jconsole](http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html#gc)を参照してください。私は、これらのどれにもテニュアされたオブジェクトをリストすることはできないと思います。彼らはあなたには、しかし、いくつかの統計を与えます。だから私はこの記事をお勧めしますhttp://java.sun.com/docs/hotspot/gc/index.htmlそして+1 – bpgergo
あなたのJVMスタートアップパラメータの完全なセットは何ですか? – moodywoody