问题引出
在学习jvm堆空间时,了解到堆中年轻代分为三个区域:伊甸园区和两个幸存者区,当伊甸园区满了之后会使用gc回收不再被引用的对象销毁,剩余对象在两个幸存者区之间倒腾
但是为什么要两个幸存者区,我一个幸存者区不就行了?伊甸园剩下的直接放到这个幸存者区,再加一个计数的不就行了。
原因分析
主要原因是内存碎片!何为内存碎片,就是没法使用的内存,下面来介绍一下(其实内存碎片分为内部碎片和外部碎片,这里指的是外部碎片)
内存碎片
看一个例子来理解
- 在幸存者区中创建了如下的几个对象
- 现在垃圾收集器从内存中删除了Toyota和Tesla对象,内存就变成了如下结构
- 假设现在需要创建一个更大的新" Truck”对象。从图中可以看出,Truck没有足够大的连续空间可以放了,那么由此造成的空间浪费成为内存碎片
full gc
当产生内存碎片时,会调用full gc来整理内存
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。