【发布时间】:2014-02-14 09:12:32
【问题描述】:
根据一个相当可靠的来源this answer,在 C# 中,只要 GC 可以证明它不再被使用,就可以收集对象,即使对它的引用仍然存在。这可能会导致令人惊讶的提前完成问题。
如果您特别想将对象的收集延迟到某个时间点,那么最好的方法是什么?我们不能通过简单地保持对对象的引用来做到这一点,如果我们尝试简单地使用引用来停止 GC,那么这些操作很可能会被优化掉。我们能做什么?
(这个问题的动机是 Java 中的an older question,其中有人希望确保在 WeakReferences 被其所指对象排序时不会收集 WeakReferences 列表的所指对象。因此,解释如何在这种情况下,Java 的行为与 C# 的行为相似或不同,如果能解决 Java 中的相应问题,我们也将不胜感激。)
【问题讨论】:
-
static变量.... ? -
不太确定,但在某些情况下使用析构函数可能会有所帮助?据我所知,它会延迟收集对象,因为它希望析构函数来完成这项工作。
标签: c# java garbage-collection