Frage

Wenn ich einen Profiler verwendete Byte -Code -Instrumentierung, sollte ich a schreiben einheimischer Agent Verwendung Jvmti oder sollte ich a schreiben Java Agent Verwendung der java.lang.instrument Paket?

Wenn ich Bibliotheken wie verwenden möchte Asm - Was obligatorisch zu sein scheint, wenn Sie einen ernsthaften Profiler erstellen möchten - ich muss einen Java -Agenten verwenden. Was mich verwirrt, da ich dachte, ein einheimischer Agent kann alles tun, was ein Java -Agent kann und mehr. Aber für mich scheint es einfacher zu sein, einen Java -Agenten zu schreiben.

Gibt es Alternativen? Sollte ein Java -Agent und native Agent sowieso zusammen verwenden?

War es hilfreich?

Lösung

Fast jeder schreibt einen Java -Agenten (mit ASM oder BCEL), da er keinen C/C ++ - Bytecode Instrumentor von Grund auf neu schreiben möchte, da keine öffentlich verfügbar sind.

Was Sie nicht tun können, ist das Instrument und das Profil/überwachen/überwachen das ursprüngliche JVM, und der Zugriff auf native Funktionen erfordert JNI -Anrufe. Es gibt auch mehrere JVMTI -Anrufe, die für Sie möglicherweise nicht verfügbar sind (wenn der Speicher dient).

Ich habe vor einigen Jahren meinen eigenen Instrumentor in C geschrieben und bin gerade dabei, einen neuen zu schreiben, den ich hoffe, Open Source (abhängig von meinen bösen Overlords :-))

Wie wäre es mit einem halben Haus, einem separaten vorgeschriebenen JVM, an den Ihr native Agent Bytecode sendet. In diesem JVM macht Ihr Easy-Peasy-Basis-Basis-Instrumentor die harte Arbeit und sendet den resultierenden Bytecode an den nativen Agenten über den Kabel zurück. Ja, es scheint ein bisschen übereinstimmend zu sein, aber es ist einfacher, Ihre eigene BCI-Bibliothek zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top