首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OSGI自定义类加载器Perm Gen问题

OSGI自定义类加载器Perm Gen问题
EN

Stack Overflow用户
提问于 2017-06-03 16:07:24
回答 1查看 121关注 0票数 0

出于我们的目的,我们没有使用将jar构建到捆绑包中的标准OSGI jar参考。相反,对于在线升级,我们希望能够在升级期间提供新的和更新的jars。在启动和停止捆绑包的Activator类中,我们实现自己的URLClassLoader,然后在子文件夹中查找所有jar,并将其与OSGI一起提供给URLClassLoader作为父CLassLoader。这很棒,因为现在应用程序的管理员可以简单地将jars添加到类路径并重新启动应用程序(osgi重新启动,而不是实际关闭jvm)。我们让它工作得很好。另外,随着时间的推移,我们的bundle.jar不会变得很大,因为捆绑包jar中并没有包含所有的jar引用。

但是,现在我们可以使用OSGI在同一个JVM中远程重启应用程序。但是,当重启发生时,我们添加的类加载器永远不会被垃圾回收。因此,如果您重新启动应用程序10次,那么Perm Gen将耗尽内存(Java1.7)。

我们试图模仿apache WebAppClassLoader在卸载时所做的事情,但这也没有删除引用。

我已经在互联网上寻找了解决方案,并承认我们是在典型的OSGI实现之外编写代码,然而,没有一种方法可以清除对ClassLoader的引用。在重启之后,老实说不应该有任何引用。

我们已经使用MAT分析了堆转储,但是类的引用列表总是不同的。

谁知道在OSGI中加载外部库更好的方法?

感谢您的任何信息!

EN

回答 1

Stack Overflow用户

发布于 2017-06-05 02:00:07

使用Java 8,在版本8中没有永久的生成。

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

https://stackoverflow.com/questions/44341830

复制
相关文章

相似问题

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