Java分代的思考

我们都知道,java的gc是基于java的分代前提,不管是CMS还是G1,都是基于分代思想:老年代和新生代

思考一:为什么可以分代?

1、java中对象的生命周期是不一样的,在gc中对应年龄的概念。

短命的对象:如方法临时变量等。

长命的对象:如缓存对象、连接池等。

2、长命对象和短命对象之间的引用关系比较少(很重要)。

思考二:分代的优点是什么?

从垃圾回收的角度看,可以针对不同的分代采用不同的回收算法,提升垃圾回收的效率,降低系统stw的时间。

思考三:分代没有缺点吗?

假设我们有一个场景的java系统,是不符合思考一的java分代的前提的,那分代的垃圾回收算法反而会影响系统的性能。(期待能遇到一个这种系统。。。。)

思考四:分代只是为了垃圾回收?

就像第一点提到的,分代服务java对象,而java对象存在分配和回收两个过程,所以我们需要把对象分配和垃圾回收结合起来考虑分代,能同时提升对象分配和垃圾回收的效率才是分代想达到的目标

原文地址:https://www.cnblogs.com/mengxw/p/8626299.html