2011-12-24 9 views
2

私はいくつかのJavaアプリケーション計測を行っています。しかし、ASMまたはBCELを使用するインスツルメンテーションツールでは、バイトコードを計測することしかできません。あなたはアプリケーションの実行を計ることができるいくつかのツールを知っていますか(バイトコードだけではなく、JVMが行ったように)。Javaアプリケーション(バイトコードだけでなく)の実行を計測する

たとえば、アプリケーションがクラス

class A 
{ 
int a; 

public A() 
{} 
} 

私はA obj = new A()を行うと、その後、バイトコードがobj.aへの書き込みが含まれませんが、JVMは、そのアフィク行いますがある場合。

バイトコードではキャプチャできない他のものもあります。 JVMで実行される操作をキャプチャできるフレームワークが存在するかどうかを教えてください。

+0

バイトコードを追加すると、最も便利な計測が可能です。あなたは何をしようとしていますか?バイトコードがマシンコードにコンパイルされ、プログラムが予想されたパスに従っているとき、JITは何もしていません。したがって、JVMのみを監視した場合、何もしていないことがわかります。 –

答えて

1

計測を完全に制御したい場合は、ソースに完全にアクセスし、修正する機能が必要です。さもなければ、あなたはバイトコードが保持しているものを慈悲に持っています。

私たちのDMS Software Reengineering Toolkitは、このようなソースへのアクセスを提供するプログラム変換システムです。 Java Front Endを使用すると、DMSは(Java)コードを解析し、ASTを構築し、ASTに任意の変換を適用し、計測されたJavaコードを再生成できます。

計測器の選択はあなた次第です。このpaper on instrumenting codeは、古典的なテストカバレッジを構築する方法を説明していますが、アイデアは一般的です。

+0

しかし、内部JVM操作を実装することはできません。 –

+0

@DaveNewtonコードを自分で計測する必要があります。 –

+0

@DaveNewton:内部JVMアクションは、ほとんどがJavaのセマンティクスによって暗示される明示的なアクションによって駆動されるため、ソースコードをインスツルメントすることによってそれらを決定することができます。オペレーターが "new"を呼び出すことに興味を持っているのは、ソースをインスツルメントすること(バイトコードをインスツルメントするだけでなく)です。ソースコードは、バイトコードが持つかもしれないし、ないかもしれないすべての変数名へのアクセスを提供します。ソースから計測できないもの、またはバイトコードは、ガベージコレクションやスレッド切り替えなどの暗黙的なJVM操作です。 –

関連する問題