これについては、SOで以前に同様の質問があったことを認識していますが、私が何をする必要があるかを正確に説明しましょう。
コマンドラインJavaアプリケーションを実行する一連のテストがあり、それらにメモリプロファイリングを追加したいと思います。表示されるオプションの1つは、コードを追加することです(おそらくサードパーティのツールを使用して/別のオプションは、アプリケーションとJVMを管理/計測するサードパーティツールを使用することです(理想的には、コードを変更する必要はありません)。 Valgrindのようなものですが、Java用です。可能であればオープンソースでもあります。
私が本当にやりたいのは、メモリ使用量が定期的に、たとえば毎秒監視され、テキストファイルにダンプされるようにメモリテストを設定することです。そうすれば、メモリ使用量が時間の経過とともに変動/増加/減少するかどうかを確認できます。最大ピークと最小ピークを計算することもできます。
ここの誰かがこのようなことをしましたか?
前もって感謝します。
JProfilerのようなものを使用すると、JVMに特定のパラメーターを追加するだけで済みます。 JVMTIを使用します。
私はあなたがプロファイラーと彼らがあなたのために何ができるかを正確に読んでいるべきだと思います。また、JVMTIを読むことをお勧めします。
JVMTMツールインターフェイス(JVM TI)は、ツールで使用するための新しいネイティブプログラミングインターフェイスです。状態を検査し、Java仮想マシン(JVM)で実行されているアプリケーションの実行を制御する方法を提供します。JVMTIは、JVM状態へのアクセスを必要とする幅広いツールをサポートします。これには、プロファイリング、デバッグ、監視、スレッド分析、およびカバレッジ分析ツールが含まれますが、これらに限定されません。
注:JVM TIは、Java仮想マシンプロファイラーインターフェイス(JVMPI)およびJava仮想マシンデバッグインターフェイス(JVMDI)を置き換えます。JVMPIおよびJVMDIはで削除されます。 J2SETMの次のメジャーリリース。
Yourkit にはかなり良いプロファイラーもあります
チェックしましたか
VisualVM および Eclipse-Callisto ?
開始するのに適した場所は、JVMが「Java-Xrunhprof」をサポートしているかどうかを確認することです。これにより、シナリオを複雑にすることなくヒーププロファイリング情報を生成できます。
http://docs.Oracle.com/javase/7/docs/technotes/samples/hprof.html を参照してください。
あなたはそれを始めるのに十分だと思うかもしれません。
私はEclipseで開発していますが、その優れたプロファイラーを使用するためにNetbeansを使用しています。一部の商用のものと比較して制限がありますが、それでもほとんどのボトルネックを見つけるには十分です
jrcmdを使用できます。これは、JRockitJVMに付属のコマンドラインユーティリティです。 Javaプロセスのpidを知っている場合は、次のことを実行できます。
JROCKIt_HOME\bin\jrcmd <pid> print_object_summary
そしてそれはあなたに与えるでしょう:
31.8% 3198k 41907 -137k [C
11.9% 1196k 300 +0k [B
11.4% 1151k 49118 +6k Java/lang/String
6.1% 612k 5604 +0k Java/lang/Class
4.3% 431k 2388 +0k [I
3.5% 353k 15097 +0k Java/util/HashMap$Entry
...
yourkit などのいくつかのプロファイラーには、メモリ割り当てをトレースするためのAPIがあります。ここでのもう1つのオプションは、 jxinsight または glassbox または jamon などの監視ツールです。
ヒープダンプを分析するには、 Eclipse Memory Analyzer が入手できる最高のツールです。これは無料でオープンソースなので、ヒープダンプの分析を必要なだけ自動化できます。
DynaTraceプロダクションエディションをお勧めします。メモリアプリケーションのプロファイルを作成するためのすばらしいツール。オーバーヘッドが低く、実行されたトランザクションが100%です。
上記の回答に加えて、私は数年前にプロファイラーを使用することも楽しんでいました。それが役立つかどうかわからない。