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/

【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案

一、内存泄露 垃圾回收器无法回收原本应该被回收的对象,这个对象就引发了内存泄露。 内存泄露的危害: (1)过多的内存泄露最终会导致内存溢出(OOM) (2)内存泄露导致可用内存不足,会触发频繁GC,...
  • mxm691292118
  • mxm691292118
  • 2016年03月30日 22:21
  • 13690

JAVA 内存泄露详解(原因、例子及解决)

Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露。 Java中的内存泄露与C++中的表现有所不同。 在C++中,所有被分配了内存的对象,不再...
  • anxpp
  • anxpp
  • 2016年05月05日 20:24
  • 37203

java中内存泄露有几种?如何分析泄露原因

一、Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(He...
  • zhousenshan
  • zhousenshan
  • 2016年10月19日 22:34
  • 2079

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

  • 2013年03月20日 01:48
  • 1.49MB
  • 下载

详细介绍Java的内存管理与内存泄露

  • 2012年08月06日 14:25
  • 31KB
  • 下载

详细介绍Java的内存管理与内存泄露

  • 2013年05月08日 17:56
  • 30KB
  • 下载

Java内存泄露监控工具__JVM监控工具介绍

Java内存泄露监控工具:JVM监控工具介绍 2012-03-02 14:20 jacky0922 jacky0922的博客 字号:T | T 本文将对JVM监控工具jst...
  • rainteen
  • rainteen
  • 2015年10月14日 22:11
  • 602

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

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程...
  • swandy45
  • swandy45
  • 2012年09月20日 18:18
  • 520

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
  • 821

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

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和...
  • gzh0222
  • gzh0222
  • 2012年12月20日 14:34
  • 1647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java内存泄露介绍
举报原因:
原因补充:

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