Question

Si je veux réaliser un profileur en utilisant byte code instrumentation , dois-je écrire un agent natif avec JVMTI ou devrais-je écrire un < strong> agent java en utilisant le package java.lang.instrument?

Si je veux utiliser les bibliothèques comme ASM - qui semble être obligatoire si vous voulez créer un sérieux profileur - Je dois utiliser un agent java. Ce qui me confond, car je pensais un agent natif peut faire tout ce qu'un agent java peut faire et plus. Mais pour moi, il semble plus facile d'écrire un agent java.

Y at-il des alternatives? Si un agent de l'utilisation java et agent natif combiné de toute façon?

Était-ce utile?

La solution

Presque tout le monde écrit un agent java (avec ASM ou BCEL) car ils ne veulent pas avoir d'écrire un instrumentor bytecode de C / C à partir de zéro, car il n'y en a pas public.

Ce que vous ne serez pas en mesure de le faire est l'instrument et le profil / surveiller la machine virtuelle Java primordiale, et l'accès à des fonctions natives requiert des appels JNI. Il y a aussi plusieurs appels JVMTI qui peuvent être indisponibles pour vous (si ma mémoire est bonne).

J'ai écrit mon propre instrumentor en C il y a plusieurs années, et je suis en train d'écrire un nouveau qui je l'espère à l'open source (selon mon mal suzerains :-))

Que diriez-vous d'une maison à mi-chemin, une machine virtuelle Java a commencé pré-séparée que votre agent natif envoie bytecode. Dans cette machine virtuelle Java de votre facile peasy à base instrumentor écriture ASM fait le travail dur et renvoie le bytecode produit à l'agent natif sur le fil. Oui, il semble un peu trop compliqué, mais il est plus facile que l'écriture de votre propre bibliothèque de BCI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top