java内存泄露介绍

翻译 2015年11月19日 15:27:47

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/

相关文章推荐

Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程...
  • WQ560
  • WQ560
  • 2012-05-22 09:16
  • 675

java内存泄露.pdf

  • 2013-06-19 15:33
  • 2.46MB
  • 下载

使用Handler容易产生的内存泄露以及介绍下Java的4种引用

转载请注明出处:王亟亟的大牛之路 最近时间都利用的不太好,都是到下午才开始学习或者做事,一上午都吹B或者XXX用掉了。。。不太好,这里督促下自己不要再懒惰,哈哈!! 再安利下我的整合库,方...

java内存泄露(normal)

  • 2008-04-28 17:13
  • 122KB
  • 下载

Java内存泄露监控工具:JVM监控工具介绍

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)