栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

卸载Java中的类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

卸载Java中的类?

可以卸载类的唯一方法是,如果使用的类加载器是垃圾回收。这意味着对每个单个类的引用以及对类加载器的引用都需要遵循dodo的方式。

一种可能的解决方案是为每个jar文件提供一个Classloader,为每个AppServer提供一个Classloader,以将类的实际加载委托给特定的Jar类加载器。这样,您可以为每个App服务器指向jar文件的不同版本。

不过,这并非微不足道。OSGi平台努力做到这一点,因为每个捆绑软件都有一个不同的类加载器,并且依赖项由平台解决。也许一个好的解决方案就是看看它。

如果您不想使用OSGI,则一种可能的实现方式是为每个JAR文件使用一个JarClassloader类实例。

并创建一个扩展Classloader的新的MultiClassloader类。此类在内部将具有JarClassloaders的数组(或List),并且在defineClass()方法中将迭代所有内部类加载器,直到找到定义或抛出NoClassDefFoundException为止。可以提供几个访问器方法以将新的JarClassloaders添加到该类。网上有多种针对MultiClassLoader的实现,因此您甚至不需要编写自己的实现。

如果为服务器的每个连接实例化MultiClassloader,则原则上每个服务器都可能使用同一类的不同版本。

我在一个项目中使用了MultiClassloader的想法,其中包含用户定义脚本的类必须从内存中加载和卸载,并且运行良好。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号