java代理是否在单独的线程中运行?

java代理是否在单独的线程中运行?,java,jvm,multithreading,javaagents,Java,Jvm,Multithreading,Javaagents,我觉得这是我应该知道的,但是java代理(用-javaagent指定)是否在单独的线程中运行?我已经读过了,但我想确定:它真的拦截了它们(听起来像是在另一个线程中运行并监视类负载)还是被JVM通知了(JVM调用它来解析类负载;它没有单独的线程) 再一次,我觉得我应该能够弄明白,但是对我好一点,我工作太努力了,我的大脑有点崩溃:p 谢谢 类加载器调用ClassFileTransformer。对您链接的文章中的transformer进行了一些修改,如下所示: public byte[] transf

我觉得这是我应该知道的,但是java代理(用-javaagent指定)是否在单独的线程中运行?我已经读过了,但我想确定:它真的拦截了它们(听起来像是在另一个线程中运行并监视类负载)还是被JVM通知了(JVM调用它来解析类负载;它没有单独的线程)

再一次,我觉得我应该能够弄明白,但是对我好一点,我工作太努力了,我的大脑有点崩溃:p


谢谢

类加载器调用ClassFileTransformer。对您链接的文章中的transformer进行了一些修改,如下所示:

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)

太好了,谢谢。非常聪明的方法,顺便说一句:)。谢谢你试一试!