Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在每次加载类或找到资源时执行操作?_Java_Profiling_Classloader - Fatal编程技术网

Java 如何在每次加载类或找到资源时执行操作?

Java 如何在每次加载类或找到资源时执行操作?,java,profiling,classloader,Java,Profiling,Classloader,我有这门课: public class UnusedJarDetector { public static void onDefineClass(Class<?> clazz, ClassLoader classLoader) { ... } public static void onGetResource(URL url, ClassLoader classLoader) { ... } ... 这是可以做到这一点使用。

我有这门课:

public class UnusedJarDetector {
    public static void onDefineClass(Class<?> clazz, ClassLoader classLoader) {
       ...
    }
    public static void onGetResource(URL url, ClassLoader classLoader) {
       ...
    }
...

这是可以做到这一点使用。Kyril Alyoshin的一个名为“loosejar”的项目使用java.lang.instrument来完成我认为您在这里要做的事情,通过JMX公开其结果,以便您可以在应用程序使用jconsole或jvisualvm运行时看到它们。请参阅。

此库可能会帮助您:使用此库,您可以创建
ClassLoaderListener
并使用
ClassLoaderEvent
。它只是一个带有回调的无聊自定义类加载器。可以通过Eclipse条件断点来实现,但是本地变量名在JRECan中被剥离了,你可以对加载程序进行子类化并重写方法吗?我不知道怎么做,我只是建议使用我找到的库。
--- ClassLoader.java.orig       2014-08-07 11:57:47.851455900 +0400
+++ ClassLoader.java    2014-08-07 12:00:55.045096600 +0400
@@ -612,7 +615,9 @@
                                         ProtectionDomain protectionDomain)
        throws ClassFormatError
     {
-         return defineClassCond(name, b, off, len, protectionDomain, true);
+       Class<?> clazz = defineClassCond(name, b, off, len, protectionDomain, true);
+       UnusedJarDetector.onDefineClass(clazz, this);
+        return clazz;
     }

     // Private method w/ an extra argument for skipping class verification
@@ -1001,6 +1006,7 @@
        if (url == null) {
            url = findResource(name);
        }
+       UnusedJarDetector.onGetResource(url, this);
        return url;
     }