gpt4 book ai didi

java - GroovyClassLoader 加载的类未列出

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:05 25 4
gpt4 key购买 nike

我正在调查一些 JVM bsaed 代码(在 Java 环境中运行的 groovy)中的内存泄漏。

我有一个简单的 Java 测试类,用于调查 Groovy 类加载的各种行为,并且我正在运行以下代码(来自纯 Java):

GroovyClassLoader localGroovyClassLoader = new GroovyClassLoader();
Class clazz = localGroovyClassLoader.loadClass("com.test.Example", true, false, true);

哪里Example只是一个简单的 Groovy 类(不做任何特别的事情,因为它只是我的虚拟案例)。

现在,如果在上述代码之后我立即记录以下内容:

localGroovyClassLoader.getLoadedClasses().length

它记录了 0 - 尽管我可以验证我加载的类一切正常( clazz 输出它实际上是 Example )。

我想使用 getLoadedClasses() 的原因方法是因为我动态地动态重新加载groovy,所以在重新加载时我还想清除元注册表(详细信息如下: https://stackoverflow.com/a/10484023/258813 ) - 所以计划使用以下代码:

for (Class c : localGroovyClassLoader.getLoadedClasses()){
GroovySystem.getMetaClassRegistry().removeMetaClass(c);
}

但显然,如果 getLoadedClasses()尽管刚刚加载了一个类,但返回 0 我将无法运行上面的代码。

谢谢

最佳答案

父类加载器中是否有 com.test.Example 已编译的类?调用 getLoadedClasses 只会提供此 GCL 本身直接加载的类。如果它能够通过委托(delegate)给其父加载器来找到特定的类,那么它不需要加载该类本身,并且该类不会包含在 getLoadedClasses 中。

关于java - GroovyClassLoader 加载的类未列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com