关闭

java内存泄露介绍

标签: 内存泄露java内存管理内存溢出内存
324人阅读 评论(0) 收藏 举报
分类:

java最大的优势之一就是内存管理,你可以简单的创建对象, java垃圾回收器会为你分配和回收内存,但是,这种情形也不是那么简单,因为内存泄露在java程序中经常发生。这篇文章介绍了什么是内存泄露,内存泄露是怎么发生的,以及怎么阻止他们。

什么是内存泄露

内存泄露的定义是:应用程序不再使用对象了,但是因为有引用的存在垃圾回收器不能删除他们。

为了理解这个定义,我们需要理解内存中对象的状态,下边这个图解释了什么不是不被使用什么是不被引用。


上边这个图中有引用的对象和不被引用的对象,不被引用的对象将会被垃圾回收器回收,引用的对象不会被垃圾回收器回收,不被引用的对象肯定不会被使用,因为没有其他对象引用它,但是不被使用的对象并不是都没有引用的。他们中有一些还会被引用,这就是内存泄露的原因。

为什么内存泄露会发生

我们来看下边这个例子来看看为什么内存泄露会发生,在下边的例子中,对象A引用对象B,A的生命周期是(t1-t4)比B的(t2-t3)要长一些,当B在应用中不被使用的时候,A依旧保存着B的引用,因此,垃圾回收器不能从内存中移除B。这可能就会导致内存溢出的问题,因为A可能对其他的对象也做同样的事情,这样就会有很多对象不被回收,消耗内存空间。
同样,B也可能拥有其他对象的一些引用,这些对象在B中被引用并且没有被回收,所有这些没有被使用的对象将会消耗稀少的内存空间。

怎么样阻止内存泄露

下边是能够快速上手的阻止内存泄露的一些小技巧
1、注意集合类,比如HashMap,ArrayList等等,因为这些是内存泄露经常出现的地方,当声明为static的时候,他们的生命周期和应用程序的生命周期一样长。
2、关注事件监听和回调,如果一个监听器注册但是没有解除注册那么内存泄露可能会发生。
3、如果一个类自己管理自己的内存,程序员要对内存泄露有所警觉。指向其他对象的对象的成员变量需要被置为null

原文链接:http://www.programcreek.com/2013/10/the-introduction-of-memory-leak-what-why-and-how/

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:240501次
    • 积分:4931
    • 等级:
    • 排名:第5755名
    • 原创:180篇
    • 转载:39篇
    • 译文:68篇
    • 评论:49条
    文章分类
    最新评论