Инструментация кода байта - реализовать нативного или Java Agent?

StackOverflow https://stackoverflow.com/questions/7321894

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top