新生代满了会触发 young gc,老年代满了会触发 old gc。gc时会回收对象,那么具体是什么样的对象会被垃圾回收器回收呢?
finialize()
方法自救首先,jvm 会通过可达性分析算法来判断哪些对象会被回收,哪些不会被回收。可达性分析算法会从一个对象触发,一层层向上,分析有谁在引用它,看是否有一个 gc roots。
被 gc roots 引用的对象就不会被垃圾回收。gc roots 指的是局部变量,或者类的静态变量。具体可以看这篇文章:什么是被 gc roots 直接引用的对象?。
其次,看引用类型。java中有强引用、软引用、弱引用和虚引用:
所以总的来说:
最后,一个对象没有被 gc roots 引用,是否立即就会被回收呢?
也不一定立即被回收,该类可以重写finialize()
方法,在finialize()
中让一个 gc roots 重新引用这个对象,就能自救。
如对本文有疑问, 点击进行留言回复!!
sap cloud platform destination的配置
springcloud中feign调用处理mybatis-plus Ipage反序列化问题。
Flume 史上最全面的大数据学习第十篇(一) 别再说不知道flume是什么了
网友评论