为什么新生代有两个survivor,新生代垃圾回收图解
文章目录
最初学习JVM的时候,一直有一个疑问,为何JVM新生代会有两个survivor,它的具体流程是怎样的
后来对于这句话也一直不解:Eden 和 Survivor 中还存活着的对象一次性地复制到另外一块 Survivor 空间上, 最后清理掉 Eden 和刚才用过的 Survivor 空间,一头雾水。
最后上网搜了一篇高质量博客 为什么新生代内存需要有两个Survivor区
为什么设置两个survivor
如果设置一个survivor会出现内存碎片
- 当Eden区满了之后发生MinorGC
- 将存活对象复制到survivor区
- 当Eden区对象又满了触发MinorGC
- 由于在Survivor区的对象也会成为垃圾,所以出现内存碎片
如果设置两个survivor就会完美避免内存碎片
注释:内存碎片会导致大对象无法分配
- 当Eden区满了之后发生MinorGC
- 将Eden的存活对象复制到survivor1中
- 当Eden区对象又满了触发MinorGC
- 将Eden和survivor1中的存活对象复制到survivor2
问答区域
为什么不使用一个survivor区
谈一谈新生代复制算法的流程
注释:一般情况把一些总结的,以问题为导向的内容放到公众号,供大家复习巩固
回复:新生代,见详情