나는 런타임 동안 다양한 목적으로 클래스 파일을 계측하고있다. JVMTI 에이전트를 사용하고 있습니다. 방법을 도구로 사용하려는 나의 전략은 RetransformClasses
함수를 호출하여 ClassFileLoadHook
을 호출하는 것입니다. 이 전략은 실제 계측이 후속 함수 호출에서 발생하기 때문에 계측 시간 이후에 추가 호출을하는 모든 메소드에 대해 잘 작동하지만 프로그램에 main
함수와 같은 추가 호출이없는 메소드에서는 작동하지 않기 때문에이 방법이 효과적입니다.추가 호출이없는 JVMTI 에이전트로 실행중인 메소드를 재 변환하는 방법은 무엇입니까?
실행하는 동안 즉석에서 메서드를 측량하고 싶습니다. 계측 코드의 OSR (On-Stack Replacement)과 같은 절차가 필요합니다. JVMTI 또는 다른 방법으로 사용할 수있는 전략이 있습니까?
추신 : OpenJDK 소스 코드를 편집/패치하는 데 도움이 될 경우 공개하겠습니다.
내가 얻지 못하는 것 : 그러한 방법이 ** 결코 부름받지 않을 것이라는 점을 고려하면; 그것을 조작하는 요점은 무엇입니까? 내 말은 나중에 메서드를 호출 할 때 "통찰력"을 부여하는 도구가 아니라는 것입니다. 메서드가 호출 될 때처럼? – GhostCat
프로파일 링 **에 대한 계측과 관련하여 귀하는 정확합니다. 메서드에서 장시간 실행되는 루프를 병렬 처리하는 코드를 구현하고 있습니다. 그래서 당신이'main'에 지루한 루프를 가지고 있다면, 나는 스레드를 생성하고 em에 참여하기를 원합니다 (물론 병렬화 가능하다면). 그래서 단일 호출 함수를 구현하는 것이 중요했습니다. –
javaagent를 살펴 보았습니까? –