首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未列出由GroovyClassLoader加载的类

未列出由GroovyClassLoader加载的类
EN

Stack Overflow用户
提问于 2013-01-22 23:13:18
回答 1查看 706关注 0票数 1

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

我有一个简单的Java测试类,用于研究Groovy类加载的各种行为,并运行以下代码(来自普通Java):

代码语言:javascript
复制
GroovyClassLoader localGroovyClassLoader = new GroovyClassLoader();
Class clazz = localGroovyClassLoader.loadClass("com.test.Example", true, false, true);

其中Example只是一个简单的Groovy类(没有做任何特殊的事情,因为它只是我的虚构的例子)。

现在,如果紧跟在上面的代码之后,我记录了以下内容:

代码语言:javascript
复制
localGroovyClassLoader.getLoadedClasses().length

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

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

代码语言:javascript
复制
for (Class c : localGroovyClassLoader.getLoadedClasses()){
    GroovySystem.getMetaClassRegistry().removeMetaClass(c);
}

但是很明显,如果getLoadedClasses()返回0,尽管我刚刚装入了一个类,我将不能运行上面的代码。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-23 01:41:33

在父类加载器中有com.test.Example编译的类吗?调用getLoadedClasses只会给出这个GCL直接加载的类。如果它能够通过委托给它的父类加载器来找到一个特定的类,那么它就不需要加载这个类本身,而且这个类也不会包含在getLoadedClasses中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14461773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档