Java堆从GC的角度可以分为:新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代(java8 取消了永久代,采用了 Metaspace)。

一、新生代
是用来存放新生的对象,一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代又分为Eden区、ServivorFrom、ServivorTo三个区。

Eden区:
Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够时就会触发MinorGC,对新生代区进行一次垃圾回收。

ServivorFrom:
上一次GC的幸存者,作为这一次GC的被扫描者。

ServivorTo:
保留了一次MinorGC过程中的幸存者。
二、老年代
主要存放应用程序中生命周期长的内存对象。如果有特别大的对象,新生代放不下,就会使用老年代的担保,直接放到老年代里面。