Java 手动释放流作用域上的对象以进行垃圾收集

Java 手动释放流作用域上的对象以进行垃圾收集,java,garbage-collection,spring-webflow,Java,Garbage Collection,Spring Webflow,我正在开发一个WebFlow应用程序,它只运行一个“主”流。此流在流作用域上存储大量对象,用于子流之间的通信。对于其中一些对象,我可以验证它们是否不再需要,并且我希望手动释放它们进行垃圾收集,而不是等待用户注销 有没有一种干净的方法可以做到这一点,或者这是一个坏主意?您可以做的最接近的事情是删除对不再需要的对象的所有强引用。无论如何,你都应该把这当作良好的实践。e、 g.清除不再需要的对象集合,并在不需要时立即关闭()资源(即使GC可能会为您这样做) 这将最大限度地增加GC在程序中的任意点可以收

我正在开发一个WebFlow应用程序,它只运行一个“主”流。此流在流作用域上存储大量对象,用于子流之间的通信。对于其中一些对象,我可以验证它们是否不再需要,并且我希望手动释放它们进行垃圾收集,而不是等待用户注销


有没有一种干净的方法可以做到这一点,或者这是一个坏主意?

您可以做的最接近的事情是删除对不再需要的对象的所有强引用。无论如何,你都应该把这当作良好的实践。e、 g.清除不再需要的对象集合,并在不需要时立即关闭()资源(即使GC可能会为您这样做)

这将最大限度地增加GC在程序中的任意点可以收集的对象数量


反过来,GC通过只在需要时运行来减少总暂停时间并最大限度地提高效率。经常运行它通常会降低程序的吞吐量,除非您有一个非常简单的工作流程和一个非常清晰的点,在这个点上可以清理大部分(比如80+%)内存。

您可以做的最接近的事情是删除对不再需要的对象的所有强引用。无论如何,你都应该把这当作良好的实践。e、 g.清除不再需要的对象集合,并在不需要时立即关闭()资源(即使GC可能会为您这样做)

这将最大限度地增加GC在程序中的任意点可以收集的对象数量


反过来,GC通过只在需要时运行来减少总暂停时间并最大限度地提高效率。经常运行它通常会降低程序的吞吐量,除非您有一个非常简单的工作流程和一个非常明确的点,在这个点上可以清理大部分(比如80+%)内存。

Java中没有“手动释放”对象的概念。让垃圾收集器完成它的工作。通过删除您知道不再需要的活动引用,您可以使对象更早地符合垃圾收集的条件。无论您做什么,都只会向GC建议不再使用这些对象。实际上,您在GCollection中没有任何控制权,Java中没有“手动释放”对象的概念。让垃圾收集器完成它的工作。通过删除您知道不再需要的活动引用,您可以使对象更早地符合垃圾收集的条件。无论您做什么,都只会向GC建议不再使用这些对象。实际上,您在GCollection中没有任何控制。“只在需要时运行。”-请您详细解释一下,或者给我指一个链接?@WhoAmI当没有足够的可用内存来执行分配时,会触发GC。通常这是小收藏。CMS还可以在永久空间填满之前开始释放内存,以避免等待它填满。因此,这会占用更多CPU,但会减少暂停时间。“只在需要时运行。”-请您详细解释一下,或者给我指一个链接?@WhoAmI当没有足够的可用内存来执行分配时,会触发GC。通常这是小收藏。CMS还可以在永久空间填满之前开始释放内存,以避免等待它填满。这样会占用更多的CPU,但会减少暂停时间。