如何使用Java在“沙盒”模式下运行库?

时间:2016-08-28 20:37:59

标签: java server sandbox sandbox-solution

我正在使用一些第三方源代码,这是用GUI运行的,但是我在不使用GUI的情况下集成它,我注意到第三方代码严重的内存泄漏我是使用。所以我想知道,是否有可能以某种方式在沙盒中创建第三方应用程序实例的对象,我可以在以后删除该对象,并且所有对该代码调用的对象的引用都将被删除垃圾收集器。

这样的事情可能吗?有什么替代方案可以实现类似的场景,或者希望唯一的可能性是从java -jar customApp等流程构建器调用其他应用程序?虽然这有点难看......

编辑: 是否会在单独的Thread中运行该代码然后等待线程完成,导致垃圾收集器删除与所谓的那些相关的所有对象?

1 个答案:

答案 0 :(得分:1)

首先,在您实际使用内存分析器(例如yourkit)研究内存使用情况并完全理解内存消耗的原因之前,您不太可能成功驯服它。

其次,如果本机而不是Java存储器是问题,那么根本就没有什么可做的。

以下内容可能与您的愿望相近。

将有问题的库加载到自己的类加载器中,并且只通过在主类加载器中加载的非常窄的接口引用它,然后继承到特殊的类加载器。这将使引用更难以保留到库中创建的对象,但绝不是不可能的。例如,如果库创建了线程,并将引用放入ThreadLocal个对象中,那么你就可以回到你开始的地方,除非你能告诉它杀死线程。尽管如此,如果图书馆在静态参考文献中堆积了大量的对象,这不会有帮助。