哈喽哈喽大家猴,我是把代码写成bug的大头菜。公众号:大头菜技术(bigheadit)。原创不易,但欢迎转载。
看文章前,我们先复习一下。
什么对象才能直接进入老年代?
你可能很快就说出来,毕竟八股文不是白背的。
- 大对象直接进入老年代。
- 动态年龄判断
- 年龄大于阈值,进入老年代
- Minor GC后,存活的对象空间大于survivor空间,直接进入老年代。
好了嘛,应该没了吧。
这次,我们把目光聚焦到:动态年龄判断。
下面这图片,摘自JVM书的一段话:
什么时候对象能进入老年代空间时?
其中一个触发条件就是:动态年龄判断。
简单点说:在survivor中,相同年龄的所有对象大小大于survivor的一般空间。年龄大于或等于该年龄的对象可以进入老年代。
但真的是这样子吗?
前提条件:现在我假设survivor空间有100M空间。
来。我举个例子哈,跟着我的思路走一遍。
假设年龄3的对象大小超过了survivor区域的一半,比如占据60M吧。
我们分析一下:年龄为3,说明经历了3次GC都存活了下来。
然后我们思考一下,年龄3的对象是从哪里来的?
肯定是从年龄2的对象中来的。这点毋庸置疑吧!
我们再换个思路想一下。
既然,年龄3的对象是从年龄2的对象中来的。(先说明哈:年