2012-04-24 20 views
1

実行中のJavaアプリケーションのプログラムカウンタ(PC)レジスタ値、特にAndroidエミュレータで実行されているJavaプログラムレジスタの値を取得できますか?たとえば、gprofは、プログラムの実行時間を消費している関数を見つけるためにPCのレジスタ値をランダムにサンプリングします。そのようなコンセプトは、JVMでも意味をなさないでしょうか?明確にするために、私はプログラムカウンタの実際の値を希望します。Javaプログラムのプログラムカウンタのレジスタ値

また、コードがメモリ内にどのように拡散しているかを測定する方法はありますか?これは、通常のプログラムでは、objdumpによって返されるアドレスの範囲を調べることによって幾分測定できます。しかし、このアプローチは共有ライブラリのアドレスを扱いません。共有ライブラリのアドレスはJVMのコンテキストではわかりません。

+0

Dalvikは通常のJVMと非常に異なっているため、ほぼ確実に両者に適したソリューションはありません。 –

答えて

0

VisualVMのような多くのJavaプロファイラーは、サンプリングベースのプロファイリングを行うことができます。

コードメモリの使用については、ガーベッジコレクタの「永続世代」(PermGen)が主に含まれています。 VisualVMはそれを表示することもできます。

+0

元の質問ではっきりしていないのは残念です。私は、実際にはプログラムカウンタの値がプログラムのレイアウトの広がりを知ることを望んでいます。理想的には、私はPC値のヒストグラムも望みます。 – arunchaganty

+0

@arunchaganty:JVMTI APIを見てください:http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html - そこになければ、できません。しかし、通常はJavaを使ってそのレベルまで下がることはあまり意味がありません。 –

+0

@Michealその参考にしていただきありがとうございます。 'jlocation'フォーマットは、明らかにネイティブのマシンの位置に対応することができます。 'GetFrameLocation'が関連情報を与えるかもしれないようです。私はこの情報を得るために私自身のツールを書く必要がありますか? – arunchaganty

関連する問題