首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理类加载器

处理类加载器
EN

Stack Overflow用户
提问于 2010-03-31 18:52:27
回答 5查看 2.1K关注 0票数 5

我正在使用一个自定义的类加载器,它扩展了URLClassLoader。我将一些类加载到我的自定义类加载器中,并执行一些任务。一旦任务完成,我想处理掉类加载器。我尝试通过将引用设置为null来完成此操作。

但这不会对类加载器进行垃圾回收。

有什么方法可以帮助我实现我想要的目标吗?

EN

回答 5

Stack Overflow用户

发布于 2010-03-31 19:05:16

基本上,正如@invariant已经指出的那样,取消对特定类加载器加载的所有类的引用应该会使该类加载器成为垃圾收集器。但是,(至少)有一个例外:如果一个类是序列化的,那么该类(以及它的类加载器)将由ObjectStreamClass在内部引用,这是一个原始类,因此永远不会被垃圾回收。因此,在这种情况下,在整个JVM终止之前,类加载器也不能被垃圾收集。

请参阅“与垃圾收集和序列化相关的问题”一节中的完整解释here

票数 3
EN

Stack Overflow用户

发布于 2010-03-31 18:56:07

ClassLoader doc中:Every Class object contains a reference to the ClassLoader that defined it。这阻止了您的加载器被收集。您还必须清空对类和这些类的实例的所有引用。

票数 2
EN

Stack Overflow用户

发布于 2010-03-31 18:57:48

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4950148上有一个6年前的bug,它似乎就是你想要的。不幸的是,似乎还没有实现这样的功能……

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

https://stackoverflow.com/questions/2552218

复制
相关文章

相似问题

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