在G1 GC的官方文档Garbage-First Garbage Collector中,有一个部分是这样的:
但是,对于巨型对象有特殊的规定,用于原始类型的数组,例如bool,各种整数和浮点值。
这些词是什么意思?我在google中找不到任何参考资料,是Java流程直接将它放在终身生代中,它分配了一组原始类型,我真的很困惑,有人可以帮我吗,是官方的解释吗?
答案 0 :(得分:0)
如果这些原语的数组大小超过G1区域的一半(与其他对象相同),则将它们视为庞大的对象。但是,在回收这些数组时,G1会以不同的方式对待它们,因为它将在任何类型的收集暂停期间尝试回收它们。为了安全地执行此操作,收集器需要检查到阵列的任何链接以确保不再可以访问它。这就是为什么文档说:“如果G1未被大量对象引用,则G1会尝试回收它们。”这似乎有些令人困惑,因为您希望仅在没有引用的情况下才回收某些对象。
此错误解释了此措辞背后的原理 https://bugs.openjdk.java.net/browse/JDK-8048179
此外,此博客文章还提供了更多详细信息 https://blogs.oracle.com/poonam/eager-reclamation-of-humongous-objects-with-g1