9

Javaコードでネイティブメモリリークが発生している可能性があります。ネイティブメモリプロファイリングを行うツールはありますか?また、実行中のJavaプロセスのネイティブメモリ分析をサポートするツールはありますか?

ありがとう!!

編集:私はすでにMemory ValidatorとPurifyを試しましたが、32ビットプロセスしかサポートしていないようです。実行中のWindowsプロセスに簡単に接続して、その特定のプロセスのネイティブメモリ分析を提供できる上記のツールと同様のツールはありますか?

4

6 に答える 6

4

Hotspot VM を使用した Java SE 6のトラブルシューティング ガイドには、ネイティブ メモリ リークの検出を支援する手法に関するかなり詳細なセクションが含まれています。これらには以下が含まれます:

  • すべてのメモリ割り当てと割り当て解除の呼び出しをラップして、使用されているメモリの量を追跡します。
  • Linux でメモリ割り当てをデバッグするために、Microsoft Visual C++ コンパイラまたは mtrace (および MALLOC_TRACE) によって提供されるデバッグ サポートなどのプラットフォーム固有のサポートに依存します。
  • Rational Purify などのメモリ リーク分析ツールを使用します。

とりわけ。特に、この記事では、すべてのプラットフォームに理想的なソリューションは存在しないと述べています。

また、-Xcheck:jniほとんどの JVM で使用できると思われるフラグの使用を検討してください。フラグ自体は、-Xフラグが非標準であることを示していますが、フラグはIBM JDKOracle JRockit R28、さらには Oracle/Sun JVM でも使用できるようです。フラグを有効にすると、ラッパーが JNI 呼び出しの周りに追加されるモードに切り替わるため、 JNI プログラマーズ ガイドおよび仕様に記載されているように、JVM 呼び出しに渡された不正な引数を追跡できます。メモリ リークを検出する際の使用は主観的なものですが、無効なパラメータが発行されたことが原因でリークが発生していると思われる場合は、間違いなく役立ちます。

于 2011-07-28T18:55:10.740 に答える
2

の知る限り、JProfiler、JVisualVM などの Java ツールでは実行できません。ネイティブ コードにメモリ リークがある場合は、ネイティブ コード用のツールを使用してください。あなた、つまり。C から実行できます (つまり、jvm.dll をロードします)。Visual StudioまたはC++ (Linux) のメモリ リーク検出を使用してメモリ リークを見つけるこの記事を参照してください。

注: もちろん、リークがヒープ リークに関連している場合 (deleteglobalref を忘れた場合)、Java ツールで見つけることができますが、JNI では非常にまれです。

于 2011-07-28T18:18:49.270 に答える
-6

私はJProfilerの大ファンです。これは、プロファイリングとメモリリークに最適なツールです。ほとんどのツールに比べてかなり安価で、習得が非常に簡単で、多くの機能があります。

http://www.ej-technologies.com/products/jprofiler/overview.html

于 2011-07-28T18:09:52.667 に答える