Java堆从GC的角度能够分为:新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代(java8 取消了永久代,采用了 Metaspace)。java
1、新生代
是用来存放新生的对象,通常占据堆的1/3空间。因为频繁建立对象,因此新生代会频繁触发MinorGC进行垃圾回收。新生代又分为Eden区、ServivorFrom、ServivorTo三个区。
ide
Eden区:
Java新对象的出生地(若是新建立的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够时就会触发MinorGC,对新生代区进行一次垃圾回收。
spa
ServivorFrom:
上一次GC的幸存者,做为这一次GC的被扫描者。
对象
ServivorTo:
保留了一次MinorGC过程当中的幸存者。
2、老年代
主要存放应用程序中生命周期长的内存对象。若是有特别大的对象,新生代放不下,就会使用老年代的担保,直接放到老年代里面。
生命周期