【问题标题】:Manually free objects on flow scope for garbage collection手动释放流范围内的对象以进行垃圾收集
【发布时间】:2014-05-13 16:30:16
【问题描述】:

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

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

【问题讨论】:

  • Java 中没有“手动释放”对象的概念。让垃圾收集器完成它的工作。您可以通过删除您知道不再需要的实时引用,使对象更早地符合垃圾回收的条件。
  • Java 有一个非常智能的 GC 来处理这个问题。无论您做什么,都只会向 GC 建议不再使用这些对象。你实际上在 GCollection 中没有任何控制权。

标签: java garbage-collection spring-webflow


【解决方案1】:

您可以做的最接近的事情是删除对不再需要的对象的所有强引用。无论如何,您都应该将其作为良好的做法。例如清除不再需要的对象集合并在不需要时立即关闭()资源(即使 GC 可能会为您执行此操作)

这将使 GC 可以在程序中的任何点收集的对象数量最大化。

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

【讨论】:

  • “只在需要的时候运行。” - 你能详细解释一下或者给我一个链接吗?
  • @WhoAmI 当没有足够的可用内存来执行分配时,会触发 GC。通常这是次要集合。 CMS 还可以在永久空间填满之前开始释放内存,以避免等到它填满。因此,这会使用更多 CPU,但会减少暂停时间。
猜你喜欢
  • 1970-01-01
  • 2011-10-22
  • 2013-12-14
  • 2021-11-22
  • 2011-07-16
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多