java - 强制执行 JVM GC - 有充分的理由(我希望)

标签 java garbage-collection jvm

让我们看看与垃圾收集速度相关的潜在竞争条件。

初始状态:

main => a
a => b
b => c

ma​​in程序引用对象a,对象a引用bb引用文献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/

相关文章:

java - 为什么Android下的注解会出现这样的性能问题(慢)?

java - 主线程中的异常 java.util.NoSuchElementException

java - Sonar 错误 - 让这个成员成为 "protected"

c# - 创建和处理用户控件时如何释放系统内存

java - 定义 : Unfinalized versus finalizable object

java - Java 的 SecureRandom 如何知道系统上可用的 NativePRNG 的哪个实现?

java - JVM 是否记录对象或 block 的生成计数?

java - 无法识别的 VM 选项 '+HeapDumpOnCtrlBreak'

java - 数据排序的最佳方式

java - 长时间运行的Web服务架构