关于java对象不使用是要赋值为null的问题?

关于java对象不使用是要赋值为null的问题?

相信很多同学都知道,在对象不使用后要手动赋值为null,问一下原因,大部分人都说这样利于java对象被GC更早的回收,减少内存的占用,为什么要折磨说呀,下面请看一段代码

public static void main(String[] args) {
    if (true) {
        byte[] placeHolder = new byte[64 * 1024 * 1024];
        System.out.println(placeHolder.length / 1024);
    }
    System.gc();
}

上面的代码是在 if  中实例化了一个byte对象,并且在对象的作用域外手动触发了GC回收了对象,但是我们查看输出结果却发现是这样的

65536
[GC 68239K->65952K(125952K), 0.0014820 secs]
[Full GC 65952K->65881K(125952K), 0.0093860 secs]

这样的输出结果,意味着没有GC没有回收这个对象,因为内存占用并没有减少, 下面来看手动赋值为NULL以后的情况

public static void main(String[] args) {
    if (true) {
        byte[] placeHolder = new byte[64 * 1024 * 1024];
        System.out.println(placeHolder.length / 1024);
        placeHolder = null;
    }
    System.gc();
}


输出为:


65536
[GC 68239K->65952K(125952K), 0.0014910 secs]
[Full GC 65952K->345K(125952K), 0.0099610 secs]

这次GC回收后内存减少了许多,这就意味着这个对象被回收了,也就意味着,手动赋值为NULL可以加快对象的回收;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值