Java에서 객체 생성을 모니터링하기 위해 ASM을 사용하고 있습니다. 현재, 내가 newObjectReference의 사본을 복제하는Java에서 ASM을 사용하여 모니터 객체 생성
dup;
invoke XXX.init;
call_my_method(Object)
내 생각에
invoke XXX.init
에서 새 개체 및 기기 프로그램의 창조의 지표로 초기화에 전화를한다 받아 ,이 개체의 init 뒤에이 개체를 보관하기 위해 내 메서드를 호출합니다. 스레드 인스턴스가있는 경우
java.lang.VerifyError, Expecting to find unitialized object on stack.
내가 사용
"-noverify"옵션을 런타임에, 두 번째 예외가 발생 :Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at test.ThreadTest.test
그러나, 런타임시 예외가있다
두 번째 경우에는 원래 프로그램의 스레드를 제외한 ()에 대한 호출이 없음을 확신합니다.
새 개체 만들기를 모니터링하는 더 좋은 방법이 있습니까?
고마워요.
할당을 모니터링하기 위해 메모리 프로파일 러를 사용할 수 없다고 가정합니다. 이 데이터를 얻었 으면이를 시각화하는 방법이 필요합니다. 예 : http://www.yourkit.com/docs/11/help/allocations.jsp –
'call_my_method (Object)'에 사용하는 정확한 바이트 코드 명령어를 제공 할 수 있습니까? – vijay
의견을 내 주셔서 감사합니다. 제가 실수를. 나는 'init'의 유일한 인수가 새로 생성 된 객체라고 가정했기 때문에 'dup'을 사용하면 'init'다음에이 객체를 방문 할 수 있습니다. 그러나 'init'바로 전에 새로 생성 된 객체를 '초기화'하는 데 사용되는 다른 객체가있을 수 있음을 발견했습니다. 그래서 두 가지 예외를 넘었습니다.이것은 'Thread t = new Thread (new ARunnableClass())'또는 다른 유사한 객체 생성 메소드의 바이트 코드에서 확인할 수 있습니다. 오브젝트 생성을 모니터하는 다른 방법을 찾아야합니다. –