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

记忆沙盒

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

记忆沙盒

最好的方法是启动另一个JVM,例如通过套接字与之通信,然后在完成后杀死JVM。

讨论我们是否可以在同一JVM中对其进行沙箱处理将很有趣。

使用完第3方库后,您不再引用该库中的任何对象,那么仍在徘徊的垃圾又是什么?

  1. 它们的类-即使您未引用它们中的任何一个,如果它们由与您的代码相同的类加载器加载,则这些类将保留。而且它们的静态字段可以引用更多的持久数据,依此类推

  2. ThreadLocal-它可能已经设置了一些线程局部变量,而没有清理它们

  3. 线程-它可能产生了一些持续存在的线程

  4. 在某些全局位置(例如System.setProperty()),它将保留在那里。

因此,总的来说,这可能很困难。

但是,我们可以使用单独的类加载器和单独的线程来执行第三方库,并且在大多数情况下,该策略可能可以卸载由第三方创建的所有垃圾。

是否有执行此操作的现有工具?我对此不太了解。我确实有一些实现热可重装服务器的经验,并且我有一些实用程序类可用于此目的。例如

// wrap 3rd party pre, expose it as some java.*.* interfacepublic class MyWrapper implements Callable<String>{    @Override     public String call()    {        return ThirdParty.query(..);    }}HotReloader hot = new HotReloader();Callable<String> func = (Callable<String>)hot.getAppInstance("pkg.MyWrapper");String result = func.call();// then dereference `hot` and `func`

请参阅HotReloader



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

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

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