轻松搞定JAVA面试之Java 中会存在内存泄漏吗

前言--大家好,很快又到周末了,周末对于我们这种IT宅男来说,就是宅着陪电脑,所以今天继续为大家带来一篇JAVA面试文章,希望大家多多转发、收藏、评论、关注本头条号,你们的支持是我持续写作的动力,谢谢。

今天我们要探讨的面试题是:Java 中会存在内存泄漏吗 ?

我们知道Java内部有一个垃圾回收机制(GC),不像C++(开辟了内存空间还得手动释放),所以理论上java应该不会造成内存泄漏了吧?但是当我们实际做项目开发的时候,就会经常遇到内存泄漏的问题。可能会存在没有用处但是还存在在内存空间的对象,这些对象不能被GC回收,所以这些对象的堆积也会使得内存造成泄漏。比如像hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露。

我们来看一个实例:

轻松搞定JAVA面试之Java 中会存在内存泄漏吗

上面的代码主要实现的是栈的结构(FILO先进后出),当我们使用它的时候编译测试都能通过,似乎没有什么问题。然而其中的pop方法却存在内存泄露的问题,因为栈内部维护着对这些对象的过期引用(obsolete reference),当我们用pop方法把栈中的对象弹出时,这个对象不能被当作垃圾回收,即使调用这个栈的程序不再引用这些对象。在JAVA中,内存泄露有着很强的隐蔽性,这种内存泄露其实就是无意识的对象保持。如果这样存在被无意识的保持了的对象,那么这个对象中存在的引用的其他的对象也会被无意识保持,垃圾回收器就不会回收这些对象了。当这样的对象越积越多,就很容易造成内存泄漏。

欢迎大神们在评论区进行点评,提出不足和改进之处,我只是起到抛砖引玉的作用!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值