G1依旧存在着老年代和新生代,只不过相比起CMS等垃圾回收器将新生代和老年代区域划分的那么明显, 在G1中,老年代和新生代逐渐变成逻辑上的概念了。首先G1将整个堆内存划分成一个个Region,可以先将这个Region想像成是个完全中立的内存空间,它没有任何归属。随着程序的运行,对象会不断被新建,这些对象首先会进入年轻代,但是此时G1只有Region的概念,那么这些被分配到新对象的Region就是属于年轻代,慢慢的,随着对象的增多,就触发了GC,存活的对象就会被分配到其他空闲的Region,此时这些Region就归属于老年代。而一旦GC后Region中对象全部被回收,Region就会恢复空白属性,等待下一次分配。因此在G1中,每一个Region在不同的时刻都可能属于不同的分代,可能是老年代也可能是年轻代,所以可以感觉到,新生代和老年代各自的内存区域是会不断变动的,由G1来具体做控制。