为什么新生代有两个survivor,新生代垃圾回收图解


最初学习JVM的时候,一直有一个疑问,为何JVM新生代会有两个survivor,它的具体流程是怎样的
后来对于这句话也一直不解:Eden 和 Survivor 中还存活着的对象一次性地复制到另外一块 Survivor 空间上, 最后清理掉 Eden 和刚才用过的 Survivor 空间,一头雾水。
最后上网搜了一篇高质量博客 为什么新生代内存需要有两个Survivor区

为什么设置两个survivor

如果设置一个survivor会出现内存碎片

  1. 当Eden区满了之后发生MinorGC
    为什么新生代有两个survivor,新生代垃圾回收图解
  2. 将存活对象复制到survivor区
    为什么新生代有两个survivor,新生代垃圾回收图解
  3. 当Eden区对象又满了触发MinorGC
    为什么新生代有两个survivor,新生代垃圾回收图解
  4. 由于在Survivor区的对象也会成为垃圾,所以出现内存碎片
    为什么新生代有两个survivor,新生代垃圾回收图解

如果设置两个survivor就会完美避免内存碎片

注释:内存碎片会导致大对象无法分配

  1. 当Eden区满了之后发生MinorGC
    为什么新生代有两个survivor,新生代垃圾回收图解
  2. 将Eden的存活对象复制到survivor1中
    为什么新生代有两个survivor,新生代垃圾回收图解
  3. 当Eden区对象又满了触发MinorGC
    为什么新生代有两个survivor,新生代垃圾回收图解
  4. 将Eden和survivor1中的存活对象复制到survivor2
    为什么新生代有两个survivor,新生代垃圾回收图解

问答区域

为什么不使用一个survivor区

谈一谈新生代复制算法的流程

注释:一般情况把一些总结的,以问题为导向的内容放到公众号,供大家复习巩固
回复:新生代,见详情
为什么新生代有两个survivor,新生代垃圾回收图解