JDK7以降のみを対象として、2013年7月現在、JavaのProfile技法はどんな状況にあるのか、VisualVMとNetBeansをメインにざっくりと調べたメモです。
個人レベルでのプログラミングの勉強とか、お金ない環境でとりあえずJDKさえあればナントカなる、という状況を想定してるため、商用製品でどんなのがあるかまで調べてないです。
なお実際に試したのはJDK7(7.0.25), NetBeans 7.3.1です。
JDK6の途中からVisualVMという機能がJDKに追加されまして、2013-07時点では今のところJDKさえあれば使えるProfile技法としてメジャーのようです。
元々NetBeansで開発されてた機能が、単体で切りだされたか何かで、とにかくJDK6の途中から使えるようになり、JDK7でも問題なく使えてNetBeansの皆さんどうもありがとうという感じです。
2008年と古めの記事:
JDK7でのVisualVMのドキュメントと、リモートのJVMにJMX接続する際の資料:
NetBeans 7.3.1 においては、NetBeansでProfiler機能を使う = VisualVMと同等+NetBeansでのソースコード参照の連携とか色々便利状態と考えて問題無さそうです。
入り口:
NetBeansを使ったProfiler入門:
VisualVMの仕組みでは、リモートマシン上のJavaアプリをプロファイリングする機能はサポートされていないようです。JVMの監視についてはサポートされていますので、メモリ使用量やスレッドダンプなどについては取得出来るようです。
ただ、Googleで検索してみると"VisualVM remote profiling"で結構引っかかるんですよね・・・。監視レベルでのメモリとかスレッドダンプの取得も含めて"Profiling"と指しているのか、ヒープのダンプであったりメソッド単位でのCPU使用状況の監視なども含めているのか、良くわかりません。
なお、NetBeans6では、ターゲット側に特別なパッケージを導入することで、リモートのJVMに対してもヒープのダンプ取得や、メソッド単位でのProfilingが使えたようです。
VisualVMで粒度の細かいプロファイリングをリモートJVMに対して行う手法について、今回は調べきれませんでした。商用製品とかであれば対応してくれたりするのでしょうか・・・。
Eclipseですと、"Eclipse TPTP"というプロジェクトがあって、こちらでプロファイリング機能が開発されているようです。
VisualVMとの連携ですが、いくつか専用のプラグインが開発されたりしているようです。
IntelliJ IDEAのPluginリポジトリで見つけた、プロファイリング系のPlugin:
コメント