java内存泄露介绍
来源:互联网 发布:java容器有哪些 编辑:程序博客网 时间:2024/06/05 05:14
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
- Java内存泄露介绍
- java内存泄露介绍
- 详细介绍Java内存泄露原因
- 详细介绍Java内存泄露原因
- 详细介绍Java内存泄露原因
- 详细介绍Java内存泄露原因
- 详细介绍Java内存泄露原因
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 详细介绍Java的内存管理与内存泄露
- 【专题】详细介绍Java的内存管理与内存泄露
- android内存泄露介绍
- Linux创建oracle11实例
- UItableView系列——数据源
- Android中asset文件夹和raw文件夹区别
- 可变长参数,可选参数,命名参数
- JS学习:JavaScript的核心
- java内存泄露介绍
- Unity3D 游戏资源提取工具
- Android并发编程之图文解析volatile关键字
- Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]
- 自己设计自定义界面组件的注意事项
- ListView的原理
- 《Kafka 0.9.0 Documentation》----Getting Started
- Java default protected
- Unity3d·小技巧·物体自转