Java中gc与finalize

<临时理解,可能有误,谨慎参考>

gc()只能回收Java堆上的内存,而不能回收栈中的内存,一般情况下Java中new的对象都是在堆中分配内存,因此gc回收堆内存没有问题,但是如果以某些特殊方法在栈中分配内存那么gc是无法释放这些内存的,这种情况下一般是通过finalize释放的,Java的gc回收之前会调用对象的finalize方法,但是要注意一点,即使是程序员显式调用gc也不一定会触发垃圾回收,垃圾回收一般只会在内存不够用的时候才会触发,显式的调用gc只是一种建议,因此可能造成的结果就是finalize方法长期不被执行进而长期占用内存,最终因内存占用较多触发垃圾回收,这种触发其实是一种比较不正常的触发(增加gc触发次数),因为垃圾回收会消耗较多的资源,如非必要尽量不要触发。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值