如何使用 Java 以"sandbox"模式运行库?



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

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

编辑:在一个单独的线程中运行该代码,然后等待线程完成,会导致垃圾收集器删除与那里调用的内容相关的所有对象吗?

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

第二,如果内存问题是本地的,而不是Java的,那么根本就不需要做什么。

下面的内容可能符合您的要求。

将有问题的库加载到它自己的类加载器中,并且只通过一个非常狭窄的接口引用它,这个接口在主类加载器中加载,然后继承到特殊的类加载器中。这将使对库中创建的对象的引用更难保留,但绝不是不可能的。例如,如果库创建了线程,并将引用放入ThreadLocal对象中,那么您就回到了开始的地方,除非您可以告诉它终止线程。但是,如果库在静态引用中堆积了大量对象,这将无济于事。

相关内容

  • 没有找到相关文章

最新更新