【问题标题】:When will an object reference get garbage collected?对象引用何时会被垃圾回收?
【发布时间】:2012-01-09 15:06:53
【问题描述】:

有人告诉我,只有当引用设置为空时,垃圾收集器才会收集它。但是我认为垃圾收集器将收集所有超出范围的引用,这些引用从未设置为空。

谁能告诉我垃圾收集器何时会声明引用?

【问题讨论】:

    标签: java garbage-collection


    【解决方案1】:

    GC 收集对象,而不是引用。

    GC 将在某个对象没有更多活动引用后的某个时间收集该对象。 (GC 是不确定的)

    【讨论】:

    • 如果将引用设置为null,是否有助于触发gc?
    • @user705414: 不(这就是为什么说它是不确定的)。
    • @user705414:如果在仍引用包含该字段的实例时将 field 设置为 null,则可以提前收集对象。仅当您有特定原因时才这样做。
    【解决方案2】:

    someone 可能的意思是,您可以通过将保存对该对象的引用的变量设置为null,让 GC 在对象超出范围之前收集它。在过去,这种技术对于一些非常罕见的情况(例如,在不引用对象的长时间运行的循环之前)很有价值。如今的编译器技术使这个想法几乎毫无用处,因为编译器足够聪明,可以检测到这些条件并采取相应的行动。

    【讨论】:

      【解决方案3】:

      GC 将“在需要时”从内存中删除对象。您可以尝试运行 System.gc() 但这只是 GC 应该运行的提示。当 GC 运行时,它会找到未引用的对象(或仅具有弱引用的对象等)。 GC 运行频率取决于内存空间。它最常在伊甸园空间中运行。默认情况下,GC 在 eden 空间满时运行,但您可以调整 JVM。

      你为什么首先要打扰 GC?你有什么问题?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        相关资源
        最近更新 更多