一、分代收集算法
难道就没有-种最优算法吗?
回答:无,没有最好的算法,只有最合适的算法。
1、前面所有这些算法中,并没有一种算法可以完全替代其他算法,它们都具有自己独特的优势和特点。分代收集算法应运而生。
2、分代收集算法,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点使用不同的回收算法,以提高垃圾回收的效率。
3、在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一-些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如: String对象, 由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。
4、目前几乎所有的GC都是采用分代收集( Generational Collecting) 算法执行垃圾回收的。
在HotSpot中, 基于分代的概念,GC所使用的内存回收算法必须结合年轻代和老年代各自的特点。
(1)年轻代(Young Gen)
年轻代特点