java函数标记_Java中为什么不设置一个函数,让程序员来标记可以被gc回收的变量?...

题主你的问题里不是已经包含了答案了吗。“这些变量其实还有引用的,GC也释放不误”。

那释放之后,那些“指向着一个已经释放了的对象的引用”被使用时会发生什么情况?

如果不做任何额外处理,那就是“未定义行为”,如果该段内存还没被覆盖,那就看上去对象还可用,如果被覆盖成其他数据了,会发生什么那就谁都不知道了。

如果做点特殊处理,那你就得引入“已经失效的引用”这个概念,那这个“失效”的标记长在哪里?如果在本来放对象的内存中,那这段内存根本就释放不了(释放了你也得在那里保持个失效标记)。如果在标记在引用本身上,那么谁去设置这些标记,你这个“释放函数”还不是得查找“所有指向这段内存的引用”,如果在查找过程中又产生了新的引用呢,还不是得stop the world。而且即使你解决了失效的问题,你的程序运行时好好的拿着个引用,唱着小歌吃着火锅,跑着跑着就引用失效了。究竟是你应该随时考虑它失效的情况,还是它本来不应该失效但是事实上它却失效了?如果是后者,究竟是谁让它失效的,即使我找到了谁让它失效,究竟是释放这它的程序运行得太早,还是你这段程序运行得太迟?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值