2011-12-24 4 views
2

일부 Java 응용 프로그램 계측을 수행하고 있습니다. 그러나 ASM 또는 BCEL을 사용하는 사용 가능한 계측 도구는 바이트 코드를 계측 할 수 있습니다. 여러분은 애플리케이션의 실행을 측정 할 수있는 도구를 알고 계십니까? (바이트 코드에만있는 것이 아니라 JVM에서했던 것처럼)Java 응용 프로그램 (바이트 코드뿐만 아니라)의 실행 계측

예를 들어, 응용 프로그램이 A 급

class A 
{ 
int a; 

public A() 
{} 
} 

내가 A obj = new A()을 수행 할 때, 다음 바이트 코드는 obj.a에 대한 쓰기가 포함되지 않습니다,하지만 JVM은 , 그 AFIK 할 것입니다있는 경우.

바이트 코드에서 캡처 할 수없는 다른 것들도 있습니다. 따라서 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"에 대한 호출을 계측하는 것에 대한 OP의 관심은 소스를 인스트루먼트 (바이트 코드를 계측하는 것뿐만 아니라)하여 수행 할 수 있습니다. 소스 코드는 바이트 코드가 가질 수도 있고 가지지 않는 모든 변수 이름에 액세스 할 수있게합니다. 소스 또는 바이트 코드에서 계측 할 수없는 것은 가비지 수집 또는 스레드 전환과 같은 암시 적 JVM 조작입니다. –