2011-09-06 3 views
5

, 나는 JVMTI 또는 내가 자바 에이전트java.lang.instrument 패키지를 사용하여 작성해야을 사용하여 기본 에이전트를 작성해야?바이트 코드 계측 - 기본 또는 Java 에이전트 구현? 내가 <strong>바이트 코드 계측</strong>를 사용하여 프로파일을 실현하려면

ASM과 같은 라이브러리를 사용하려는 경우 - 심각한 프로파일 작성기를 만들고 싶다면 필수적인 것 같습니다. 자바 에이전트를 사용해야합니다. 어느 날 네이티브 에이전트가 자바 에이전트가 할 수있는 모든 것을 할 수 있다고 생각했기 때문에 나 혼란 스럽습니다. 하지만 나에게 자바 에이전트 작성이 더 쉬워 보인다.

다른 방법이 있습니까? 자바 에이전트와 네이티브 에이전트를 결합해야합니까?

답변

5

공개적으로 사용 가능한 C/C++ 바이트 코드 계측기를 처음부터 작성하지 않으려 고하므로 거의 모든 사람들이 Java 에이전트 (ASM 또는 BCEL 사용)를 작성합니다.

당신이 할 수없는 일은 기본 JVM을 계측 및 프로파일 링/모니터링하고 원시 기능에 액세스하려면 JNI 호출이 필요합니다. 또한 (메모리가 작동하는 경우) 사용할 수없는 JVMTI 호출이 여러 개 있습니다.

나는 몇 년 전에 C에 내 자신의 instrumentor을 쓰고, 나는 약

하는 방법 (:-) 내 악의 군주에 따라) 나는 소스를 열 수 있도록 노력하겠습니다 새로운 하나를 작성하는 과정에있어 half way house는 네이티브 에이전트가 바이트 코드를 보내는 별도의 미리 시작된 JVM입니다. 이 JVM에서는 ASM 기반 인스트루먼트를 작성하기가 쉽지 않으므로 결과 작업을 수행하고 생성 된 바이트 코드를 원시 에이전트로 다시 보냅니다. 그래, 조금 복잡해 보이지만 자신의 BCI 라이브러리를 작성하는 것이 더 쉽습니다.

+1

미리 시작된 JVM은 무엇을 의미합니까? 여기에는 두 개의 JVM이 포함됩니까? 하나는 프로파일 링을위한 것이고 하나는 실제 응용 프로그램을 실행하는 것입니까? 왜 네이티브 에이전트가 바이트 코드를 보내야합니까? 나는 이것이 우리가 피해야 만하는 것이라고 생각했습니다. –