Инструментарий байт-кода - реализовать нативный или Java-агент - PullRequest
5 голосов
/ 06 сентября 2011

Если я хочу реализовать профилировщик, используя инструментарий байт-кода , я должен написать собственный агент , используя JVMTI , или я должен написать Javaагент с использованием пакета java.lang.instrument?

Если я хочу использовать такие библиотеки, как ASM - что кажется обязательным, если вы хотите создать серьезный профилировщик - я должен использоватьJava-агент.Что меня смущает, так как я думал, что нативный агент может делать все, что может делать java-агент, и даже больше.Но мне кажется, что написание java-агента проще.

Есть ли альтернативы?Следует ли в любом случае использовать Java-агент и нативный агент вместе взятые?

1 Ответ

5 голосов
/ 06 сентября 2011

Почти все пишут java-агент (с ASM или BCEL), так как им не нужно писать инструментарий байт-кода на C / C ++ с нуля, так как их нет в открытом доступе.

То, что вы не сможете сделать, - это инструмент, профилирование / мониторинг первичной JVM, а для доступа к собственным функциям требуются вызовы JNI. Есть также несколько вызовов JVMTI, которые могут быть недоступны для вас (если память служит).

Я написал свой собственный инструктор на C несколько лет назад, и я нахожусь в процессе написания нового, который, я надеюсь, с открытым исходным кодом (в зависимости от моих злых повелителей :-))

Как насчет половины дома, отдельной предварительно запущенной JVM, в которую ваш собственный агент отправляет байт-код. В этой JVM ваш простой в написании ASM инструктор выполняет тяжелую работу и отправляет полученный байт-код обратно нативному агенту по проводной связи. Да, это кажется немного сложным, но это проще, чем писать собственную библиотеку BCI.

...