2010-06-18 2 views
3

Я чувствую, что это то, что я должен знать, но работает ли агент java (указанный с -javaagent) в отдельном потоке? Я читал, что a Java agent is a pluggable library that runs embedded in a JVM and intercepts the classloading process, но я хочу убедиться: действительно ли это перехватывает (что звучит так, как будто он работает в другом потоке и нагрузке на мониторинг) или он уведомляется JVM (JVM вызывает его для разрешения класс нагрузки, для него нет отдельной нитки)?Работает ли java-агент в отдельном потоке?

Опять же, я чувствую, что я должен быть в состоянии понять это, но быть хорошо для меня, я слишком много работал, и мой мозг своего рода фритюре: P

Спасибо!

ответ

5

ClassFileTransformer получает вызов ClassLoader. Немного модификация трансформатора из статьи вы связаны, чтобы выглядеть следующим образом:

public byte[] transform(ClassLoader loader, String className, 
     Class redefiningClass, ProtectionDomain domain, byte[] bytes) 
     throws IllegalClassFormatException { 
    new RuntimeException("Transformer to Transform Class: " + className) 
      .printStackTrace(System.out); 
    return bytes; 
} 

дает этот выход:

java.lang.RuntimeException: Transformer to Transform Class: MyMain 
    at com.javalobby.tnt.instrument.SimpleTransformer.transform(SimpleTransformer.java:14) 
    at sun.instrument.TransformerManager.transform(Unknown Source) 
    at sun.instrument.InstrumentationImpl.transform(Unknown Source) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(Unknown Source) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$000(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
+0

Великому, спасибо. Очень умный способ узнать, btw :). Спасибо, что попробовали! – Alix

Смежные вопросы