堆外内存如何回收 java的堆内存是如何被回收的?
浏览量:1293
时间:2021-03-12 09:28:43
作者:admin
java的堆内存是如何被回收的?
以常见的CMS收集器为例。首先将堆分为年轻一代和老一代
首先在年轻一代的边缘区域分配对象(如果对象太大,可以直接在老区域分配,这个阈值可以通过JVM参数设置)
当边缘区域不能被阻塞时,需要回收空间(即触发minorgc)和(注意to Survival为空,from Survival中有幸存的对象)。所采用的原则是:
-将幸存物体插入边缘区域和从生存区域插入到到生存区域
-完成后,即清除从生存区域和边缘中要回收的物体。此时,从生存区变为新的生存区
]当你看到这里时会出现一个问题,如果幸存者不能填写数据怎么办?
此时,我们需要将幸存者区域中的对象插入旧区域。如果旧区域无法插入(没有足够的连续空间来存储这些对象),则会触发fullgc,如果在fullgc之后无法插入,则会导致oom
因此通过以上过程,我们可以得出结论fullgc必须伴随minorgc
此外,内存分配的内容而回收策略这并不是上面提到的唯一一点。我建议您看看广受好评的“深入了解Java虚拟机—JVM的高级特性和最佳实践”
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。