GC就是垃圾回收,java这种语言是动态分配内存大小的,并且依靠垃圾回收机制来完成对分配内存空间的回收,从而来避免内存溢出的问题,也在一定程度上降低了程序员工作的复杂度。
jvm中的GC采用了generation(分代回收)算法,因为大多数的对象存活的时间比较短,而少部分的对象才能够长时间存活。因此,jvm将堆内存划分为年轻代(young generation)和年老代(old generation)。年轻代中的对象通常建立时间不久,且大部分生命周期也很短;年老代中的对象则已经创建比较久了,其声明周期也相对年轻代比较长。按照上面的划分,jvm在做GC时也进行了区别对待,对年轻代GC会相对比较频繁,且采用了copying(复制)算法;年老代的GC相对比较少,且采用的是tracing算法的一种,是标记-清除-压缩。