每日一题(七)

题目:

jvm内存回收机制之对象的内存状态

分析:

根据被变量引用过程,分为三种状态:可达状态、可恢复状态和不可达状态

解答:

这三种状态的转换是对象在内存整个生命周期中所经历的三个阶段。

可达状态:对象创建之后,有一个以上的变量引用该对象。如果像

new Test();
这样的就很没有变量引用,创建之后就转到可恢复状态了;

可恢复状态: 程序中没有任何变量引用它就直接进入该状态,如

Test test = new Test();
test = null;

执行到null后,就没有变量引用Test对象了,这个状态就是可恢复状态。如果系统此时运行垃圾回收程序准备回收,在此之前先调用该对象的finalize()方法。如果通过finalize()方法后也没有变量引用到该对象,那么状态转向不可达状态。如果重新获得了引用,则转向可达状态。

不可达状态:内存回收执行后会直接回收该对象内存,对象的生命周期结束。

Java的内存回收机制

上图是引用的博客中的图片。

补充:

finalize()方法是java.lang.Object对象方法。jdk上这样描述该方法“ 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。”

有一点需要注意,对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。也就是说如果在调用一次只后,恢复到可达状态,那么java虚拟机将不会再次调用finalize()方法。这点有点奇怪,对此留下进一步思考的余地。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值