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、老年代
主要存放應用程序中生命週期長的內存對象。若是有特別大的對象,新生代放不下,就會使用老年代的擔保,直接放到老年代裏面。生命週期