gpt4 book ai didi

java - WeakReference 和 StrongReference GC 行为

转载 作者:行者123 更新时间:2023-11-29 03:20:22 26 4
gpt4 key购买 nike

我声明了一个强引用-

Data data = new Data();

为了使其符合垃圾回收条件,我将实例设置为 null-

data = null;

现在,当我将引用设置为 null 时,该对象将无法访问,并且会在 GC 运行时被垃圾回收。

以及使用 WeakReference-

Data data = new Data();
WeakReference<Data> weakRef = new WeakReference<Data>(data);

当我将引用变量设为 null 时,它将有资格进行垃圾回收。

data = null;

当我们使用 StrongReference 时,我们将其引用设置为 null 以使其成为 GC。在弱引用的情况下我们需要引用对象 null 以使其成为 GC。两者有什么区别。在强引用的情况下,如果我们只引用对象 null,它将符合 GC 的条件,并将在 GC 运行时被收集。

最佳答案

如果你有纠结的对象(即不再可达的对象),垃圾收集器可以收集它们并清除它们。请注意措辞:它是允许的。 这意味着垃圾收集器可以决定不收集它们。事实上,根本不能保证一个对象会被垃圾回收。

SoftReference 或 WeakReference 管理的对象与removed strong reference 之间的区别在于垃圾收集策略:

  • 如果需要内存,将收集软可达对象。
  • 将在第一次尝试时收集弱可达对象。
  • 否则无法访问的对象将按照收集器的策略进行收集(这可能类似于软可达,并且在启动时也可以通过一些 JVM 参数进行调整)。

尽管如此,这些都是关于最可能策略的假设,但垃圾收集器可能会以另一种方式做出决定。

请注意:弱引用和软引用在局部范围内使用时没有意义。它们很可能在实例字段中使用,并且必须始终注意这一事实,即所引用的对象可能已经被收集。

关于java - WeakReference 和 StrongReference GC 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com