プロファイリング
さて、久々の更新です。更新が遅いのはひとえに、僕がヘタレだからです・・・。
時間があんまりないってのは事実だけど、それでも日記更新する暇ぐらいあるだろうと小一時間(ry
今日は超久々にプログラミングの話題。最近研究でJavaプログラムのパフォーマンスの問題を改善する必要があって(要するにプログラムが遅いのでなんとか汁ってことで)、プロファイリングってのをやってみました。
Eclipse TPTP
まず最初に試したのが、Eclipse TPTP(Test and Performance Tools Platform)。
ちなみにEclipse用のプロファイラには他にもEclipse Profilerや、jMechanicなるものがあるが、両者とも今はメンテされてないっぽい。
さて、Eclipse TPTP を ThinkIT のこの記事なんかを参考にインストール。記事に載ってるサンプルプログラムをプロファイルしようとしたのだけど、なぜか動かない。こんな感じになります。
ちなみに、表示されてるエラーはこんな感じ。
org.eclipse.core.runtime.CoreException A time-out occurred while attempting to launch the process org.eclipse.core.runtime.CoreException: A time-out occurred while attempting to launch the process at org.eclipse.tptp.trace.ui.internal.launcher.core.LauncherUtility.createCoreException(LauncherUtility.java:123) at 以下略
エラーメッセージでぐぐってみても解決策はみつからない。
Eclipseを3.3.1にアップデートしてみたり、JDKのバージョンを変えてもダメ。Agent Controller もちゃんと設定してるはずなんだけどなあ・・・。
てなわけでTPTPを使うのは断念。
NetBeans Profiler
NetBeansが公式で提供しているプラグイン。どっかで良い評判が書いてあったので、今までNetBeans使ったことなかったけど入れてみた。
このチュートリアルがわかりやすいです。今度はすんなり動作。
研究用のプログラムを動作させてみた実行画面が下。それぞれのメソッドにかかっている時間をツリー表示、リスト表示などでホットスポットを見つけることができる。
しかし・・・
でも実は今回のパフォーマンスの問題はプロファイラで見つけることは難しいのかも。マイク入力を使ってアニメーションを動かすプログラムなのだけれど、フレーム毎にかかってる時間が全然違ってたりして、同じことやってるはずなのに・・・。
ちなみに、Javaのプロファイリングツールは、JVMPI(Java Virtual Machine Profiler Interface)という仕組みを使っているらしい。JVMPIを使うと実行中のJava VMに関する様々な情報を得られるみたい。面白そう。