jvm内存溢出

  1.内存泄漏和内存溢出区别?

内存泄漏:系统分配的内存没有被回收。

内存溢出:分配的内存空间超过系统内存。

2. jvm内存泄漏的原因分析?

jvm由5大块组成:堆,栈,本地方法栈,程序计数器,方法区,这里说一下栈它的主要记录方法的执行和对象的引用堆则存在真正的引用的对象。方法的执行的结束,可能伴随着java栈内存的自动清除,但是堆内存的对象不一定会随着栈内存的清空而清空,这样的话,堆内存里面的无用内存不能回收,这样的话,就是内存泄漏。

3. jvm垃圾回收机制思想?

就是从栈出发(root),遍历对象的引用,在遍历堆里面的引用对象,因为栈中的对象的引用执行完毕就删除,所以我们就可以通过栈中的对象的引用,查找到堆中没有被指向的对象,这些对象即为不可到达对象,对其进行垃圾回收。

如果是强引用那么java垃圾回收机制不能对其进行回收。

4. 内存泄漏的例子?

1.

分析:这是强引用对象,jvm不可能对其进行回收,那么object1如何才能被回收的呢?要么另一个是给对象赋予了新值,这样重新分配了内存空间。要么赋值为null。

2.

分析:随着Method方法的结束,Object所分配的对象内存不可能立即释放,只有随着Test58类的结束,才会释放,所以object作为Method的局部变量,object = null;这个是短暂的内存泄漏,不太容易引起我们的注意,但是我们应该知道这是有问题的。

  3.

分析:这是LinkedList源码里面的unlink方法,这个方法里面在把要移除节点的指向发生改变之后,依然要把节点里面的内容设置为null,避免发生内存泄漏问题。

4. 容器的内存泄漏

分析:这与方法里面产生一个对象类似,是短暂的内存泄漏

5. 单例模式的内存泄漏

分析:单例模式贯穿程序的整个生命周期。如果单例持有其他对象的引用,那就这个对象就不能释放,这也造成内存的泄漏。

6.各种链接

例如数据库连接,网络连接等,除非显示的调用close()方法,否则不会被垃圾回收器进行回收。

7. 监听器

在释放对象的时候,没有将删除对应的监听器

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值