Pregunta

Si quiero darme cuenta de un perfilador usando instrumentación de código de byte, ¿debería escribir un agente nativo usando Jvmti o debería escribir un agente de java utilizando el java.lang.instrument ¿paquete?

Si quiero usar bibliotecas como ASM - Lo que parece ser obligatorio si desea crear un profilador serio, tengo que usar un agente Java. Lo que me confunde, ya que pensé que un agente nativo puede hacer todo lo que un agente de Java puede hacer y más. Pero para mí, parece más fácil escribir un agente de Java.

¿Hay alternativas? ¿Debería uno usar agente Java y agente nativo combinados de todos modos?

¿Fue útil?

Solución

Casi todos escriben un agente de Java (con ASM o BCEL), ya que no quieren tener que escribir un instrumento ByTecode C/C ++ desde cero, ya que no hay ninguno disponible públicamente.

Lo que no podrá hacer es instrumentos y perfilar/monitorear el JVM primordial, y acceder a las funciones nativas requiere llamadas JNI. También hay varias llamadas JVMTI que pueden no estar disponibles para usted (si la memoria sirve).

Escribí mi propio instrumento en C hace varios años, y estoy en el proceso de escribir uno nuevo que espero abrir el código (dependiendo de mis señores malvados :-))

¿Qué tal una casa a mitad de camino, un JVM preestablecido separado al que su agente natal envía bytecode? En ese JVM, su instrumento basado en ASM es el trabajo fácil de escribir el trabajo duro y envía el bytecode resultante al agente nativo sobre el cable. Sí, parece un poco complicado, pero es más fácil escribir su propia biblioteca BCI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top