多线程__内存泄漏

什么是内存泄漏

对于应用程序来说,当对象已经不再被使用,但是Java的垃圾回收器不能回收它们的
时候,就产生了内存泄露。未引用对象将会被垃圾回收器回收,而引用对象却不会。未引用
对象很显然是无用的对象。然而,无用的对象并不都是未引用对象,有一些无用对象也有可能是引用对
象,这部分对象正是内存泄露的来源。

为什么会发生内存泄漏

让我们用下面的例子来看看为什么会发生内存泄露。对象A引用对象B,A的生命周期(t1-
t4)比B的生命周期(t2-t3)要长,当B在程序中不再被使用的时候,A仍然引用着B。在这种情况下,
垃圾回收器是不会回收B对象的,这就可能造成了内存不足问题,因为A可能不止引用着B对象,还可能
引用其它生命周期比A短的对象,这就造成了大量无用对象不能被回收,且占据了昂贵的内存资源。
同样的,B对象也可能引用着一大堆对象,这些被B对象引用着的对象也不能被垃圾回收器回收,所有的
这些无用对象消耗了大量内存资源。

怎样防止内存泄漏

  1. 使用List、Map等集合时,在使用完成后赋值为null
  2. 使用大对象时,在用完后赋值为null
  3. 目前已知的jdk1.6的substring()方法会导致内存泄露
  4. 避免一些死循环等重复创建或对集合添加元素,撑爆内存
  5. 简洁数据结构、少用静态集合等
  6. 及时的关闭打开的文件,socket句柄等
  7. 多关注事件监听(listeners)和回调(callbacks),比如注册了一个listener,当它不再被使用的时候,忘
    了注销该listener,可能就会产生内存泄露
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值