2016-08-06 8 views
-1

MAT、jmapなど、jvmメモリー使用量をオフラインで分析する方法はたくさんあります。しかし、ランタイム中にコード内のメモリ使用量を測定する方法はありますか?アドバイスをいただければ幸いです。Javaコード内のjvmメモリー使用量に関する情報を取得

+0

分析のどのようなあなたは、実行中に興味がありますか?また、どのJVMを使用していますか? – templatetypedef

+0

たとえば、ある時点で、jmapメモリの中のオブジェクトjap -heap pidのようなオブジェクトの数を知りたいと思います。 –

+0

特にこの情報で何をしたいですか? – templatetypedef

答えて

1

例えばhttps://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html

すなわち、公式のJavaドキュメントを参照してください:

Runtime.getRuntime().totalMemory() // total memory available Runtime.getRuntime().freeMemory() // free memory

here

+0

コメントの中のOPの明確化に基づいて、私はこれらのツールが実際に彼らのニーズに対処するとは思わない。 – templatetypedef

1

何かアドバイスがされる役に立つかもしれ品ですとても有難い。

あなたがアドバイスを求めているので....私のアドバイスは次のようになります - 開発時間でオプションを模索以外の何のためにこれを実行しようとしないでください。

オブジェクトサイズを推定し、この情報を使用して動作を調整するプログラムを作成しようとすると、さまざまなパフォーマンスの問題に遭遇する可能性が高く、回避方法を考え出すのに多くの時間を費やします。そして、あなたのアプリケーションはずっと複雑で、維持するのは難しいでしょう。

もう1つのアドバイス:メモリ内にどれくらいのスペースオブジェクトが占有されているかに執着しないでください。あなたが実際に大きなデータ構造を持っていたり、あなたのプラットフォーム上のメモリが非常に少ない場合を除いて、ここにいくつかのバイトをセーブすることはほとんど違いがありません。

このQ & Aはかなりよくトピックをカバーして、と言った:

+0

実際に私は、メモリしきい値制御ポリシーでサービスを実装したいと思います。 2つのメモリを消費するスレッドが実行されていることが分かっている場合は、OOMを発生させる前に終了することができます。 –

+0

私はそれがうまくいくとは思っていません。 IMOでは、別のJVMでコードを実行するほうがよいでしょう。限定されたヒープサイズです。 –

+0

vertica - HPのデータベースで、機能コールリソースプールがあり、クエリに使用できるメモリ量を制御できます。しかし、私はそれがC++で書かれていると思います。 –

関連する問題