所谓的分代回收指的就是对不同代的内存空间使用不同的垃圾回收器进行垃圾回收,对新生代进行回收我们一般叫MinorGC/YoungGC,对老年代回收我们一般叫做MajorGC/OldGC,目前只有CMS 垃圾回收器会有这个单独的回收老年代的行为。FullGC则是回收整个堆区和方法区,而实际上FullGC是调用了不同代所属的垃圾回收器进行回收,方法区使用的是老年代的垃圾回收器。



image.png
eden:from:to = 8:1:1

堆溢出错误:

OutOfMemoryError:Java heap space 堆溢出错误

当对象创建后,会在Eden区开辟空间,如果内存不够,会进行第一次初代回收;
然后再次尝试Eden区,如果仍未放下会进行第二次初代回收;
再尝试Eden区,如果还未放下则会直接尝试放入老生代,如果老生代放不下则进行第一次完全回收;
回收后再次尝试放入新生代,如果还未成功则进行第三次初代回收;
再次尝试放入新生代,如果放不下则尝试老生代,如果仍放不下则进行第二次完全回收;
回收后再次尝试放入新生代,如果放不下则尝试老生代,如果经历了三次初代两次完全仍未放下,则报堆溢出错误。