【问题标题】:Does a java agent run in a separate thread?java 代理是否在单独的线程中运行?
【发布时间】:2010-06-18 12:47:40
【问题描述】:

我觉得这是我应该知道的,但是 java 代理(用 -javaagent 指定)是否在单独的线程中运行?我读过a Java agent is a pluggable library that runs embedded in a JVM and intercepts the classloading process,但我想确定:它真的拦截它们(听起来它在另一个线程中运行并监视类负载)还是由JVM通知( JVM 调用它来解决类负载;它没有单独的线程)?

再次,我觉得我应该能够弄清楚,但是对我好一点,我工作太努力了,我的大脑有点炸了:P

谢谢!

【问题讨论】:

    标签: java jvm multithreading javaagents


    【解决方案1】:

    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)
    

    【讨论】:

    • 太好了,谢谢。非常聪明的发现方法,顺便说一句:)。感谢您试用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多