【发布时间】:2012-01-09 15:06:53
【问题描述】:
有人告诉我,只有当引用设置为空时,垃圾收集器才会收集它。但是我认为垃圾收集器将收集所有超出范围的引用,这些引用从未设置为空。
谁能告诉我垃圾收集器何时会声明引用?
【问题讨论】:
有人告诉我,只有当引用设置为空时,垃圾收集器才会收集它。但是我认为垃圾收集器将收集所有超出范围的引用,这些引用从未设置为空。
谁能告诉我垃圾收集器何时会声明引用?
【问题讨论】:
GC 收集对象,而不是引用。
GC 将在某个对象没有更多活动引用后的某个时间收集该对象。 (GC 是不确定的)
【讨论】:
someone 可能的意思是,您可以通过将保存对该对象的引用的变量设置为null,让 GC 在对象超出范围之前收集它。在过去,这种技术对于一些非常罕见的情况(例如,在不引用对象的长时间运行的循环之前)很有价值。如今的编译器技术使这个想法几乎毫无用处,因为编译器足够聪明,可以检测到这些条件并采取相应的行动。
【讨论】:
GC 将“在需要时”从内存中删除对象。您可以尝试运行 System.gc() 但这只是 GC 应该运行的提示。当 GC 运行时,它会找到未引用的对象(或仅具有弱引用的对象等)。 GC 运行频率取决于内存空间。它最常在伊甸园空间中运行。默认情况下,GC 在 eden 空间满时运行,但您可以调整 JVM。
你为什么首先要打扰 GC?你有什么问题?
【讨论】: