让我们看看与垃圾收集速度相关的潜在竞争条件。
初始状态:
main => a
a => b
b => c
main程序引用对象a,对象a引用b、b引用文献c。现在,我们希望使用 a 引用 c 而不是 b。
好:
a => c
由于b不再被引用,它可以被垃圾收集。
坏:
a = null
a => c
在这两个步骤之间(将a设置为null并将其重新指向c),b可能会与c。我怀疑单元测试可能会发现这些类型的错误,因为 GC 很可能运行得不够快而遇到麻烦。检测问题的一种方法是强制执行 GC,或者至少增加其频率。是否有任何命令行参数或其他方法可以做到这一点?如果没有,我们还有哪些其他自动化方法来防止此类错误?
最佳答案
你完全错了。即使“在这两个步骤之间”,也有对 c
某处的引用(提示:谷歌搜索 GC 根)。
您所描述的内容意味着所有运行 java 的服务器肯定会快速崩溃,但不存在这样的问题。
关于java - 强制执行 JVM GC - 有充分的理由(我希望),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263446/