`
jobar
  • 浏览: 340800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中的内存泄漏问题

 
阅读更多
1 什么是内存泄漏
  Java中的内存泄漏指的是:有些对象不再被应用程序使用的,但不能被垃圾回收器回收,因为它们仍然被其他对象引用。
  未引用的对象可以被回收,而引用的对象不能被回收。未引用的对象不再可用,因为没有其他对象引用它;但并不是所有不用的对象都是未引用的。其中有一部分是被其他对象引用的,这就是内存泄漏的由来。
2 为什么会发生内存泄漏?
  举个例子,对象A引用对象B,但A的生命周期要远超过B。当B不再被app使用是,A仍然持有对B的引用。这样,GC不能将B从内存中清除出去。这有可能会导致内存泄漏问题,因为如果A这样持有更对像B这样的对象,那么就会有非常多的对象驻留内存而导致GC不能回收内存空间。
  也有可能B也同样持有对其他更多的对象的引用。这些由B引用的对象同样也不能被GC回收掉。所有这些未被使用的对象很可能会耗光内存空间导致内存移除。
3 如何阻止内存泄漏
下面是一些可以阻止内存泄漏的实战技巧:
1 注意集合类诸如HashMap,ArrayList等。因为他们是内存泄漏可能发生的地方。特别是声明为static时,其生命周期跟app的生命周期一致。
2 注意事件监听和回调函数。如果注册了一个监听器,但不再使用时没有注销,此时内存泄漏就有可能发生。
3 “如果一个类管理它自己的内存,程序猿需要警惕内存泄漏问题”(来自Bloch, Joshua. Effective java. Addison-Wesley Professional, 2008.) 通常的原则是指向其他对象的成员变量当不再需要是指向null。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics