Java中不使用的对象为什么要手动设置为null

在Java中,当方法内有耗时操作且先前定义的大型对象不再使用时,将其手动设置为null可能有助于内存管理。在特定极端情况下,如对象占用内存大、栈帧长时间未回收、方法调用未达到JIT编译条件,这种做法可以作为优化技巧来使用,以促进内存的释放。
摘要由CSDN通过智能技术生成
public class GCSetNullTest {
public static void main(String[] args) {
{
byte[] placeholder = new byte[64 * 1024 * 1024];//64m空间
}
//加入这一行,才会回收64m内存。因为局部变量表的变量槽有复用的特性
int i = 0;//不加这行的话,GC Root一部分的变量表仍存存有对placeholder的关联
System.gc();
}

}



如果遇到一个方法,其后面的代码有一些耗时很长的操作,而前面又定义了占用了大量内存、实际上已经不再使用的变量,手动将其设置为null值(用来替代那句 int i =0 ;把变量的局部变量表slot清空)便不见得是一个绝对无意义的操作,这种操作可以作为一种在极特殊情形(对象占用内存大、此方法的栈帧长时间不能被回收、方法调用次数达不到JIT的编译条件)下的“奇技”来使用。

摘自 深入理解Java虚拟机 241页

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水上冰石

希望能帮助到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值