为什么jvm需要几次gc来找到弱引用?

时间:2014-02-14 04:42:37

标签: java garbage-collection jvm weak-references

我知道jvm中的GC会在收到对象后发现对象被弱引用,但是有人说可能需要几次gc才能让jvm找到弱引用的对象,我真的不明白它,是否有人可以解释它,或者告诉我它是真的吗?谢谢!

2 个答案:

答案 0 :(得分:0)

是的,在对象被销毁之前需要一段时间。我不知道Java WeakReference有什么问题或者它对性能的影响。

  1. 可能导致额外的垃圾收集
  2. 您无法知道何时执行循环。垃圾收集器在自己的背景线程中循环工作。
  3. WeakReferences管理取决于JRE的实施(如同所有内容),另请参阅Cost of using weak references in Java
  4. 没有办法在Java和其他高级语言(如C#)中手动销毁对象。垃圾收集器做那项工作。在循环中,在没有参考的情况下完成并销毁对象(即强引用)。弱引用不会阻止垃圾收集器收集对象。引用类型之间的差异被解释为here on StackOverflow

    无法触发收集周期。您可以通过System.gc()戳垃圾收集器,但它不会导致立即执行并“多次”。

答案 1 :(得分:0)

用于所有实际目的的垃圾收集是不确定的。你根本无法预测什么时候它会清理一些东西,如果它会导致你的应用暂停等等。大多数它表现良好的时候。你永远不应该依赖底层的gc动作或终结者。