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。
分享到:
相关推荐
关于Java中内存泄露问题的研究
java内存泄漏解决java内存泄漏解决java内存泄漏解决
如何解决Java内存泄漏
介绍了java中内存泄露的知识,如:为什么会产生内存泄露,以及通过什么样的方式可以避免内存泄露
关于JAVA内存泄漏问题注意事项.doc
内存泄漏资料未整理内存泄漏资料未整理内存泄漏资料未整理
java内存泄漏分析工具
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
java内存泄露,关于别人能够更好的理解java内存泄露原因
基于Java的内存泄露分析及定位,希望对各位有用!
java内存分析
java 内存泄漏
虽然java有垃圾自动回收机制,但在写程序时,未及时关闭连接,对象引用未释放等,仍会造成内存泄露,此文章从关闭连接,使用弱引用等方面,介绍了怎样避免内存泄露。
详细介绍了 java内存泄露 的一些细节,很受用的
opencv3和opencv4多线程内存泄漏问题:以cv::resize函数测试结果为例。 使用中可修复或者可避免内存泄漏:1)使用opencv2的版本;2)在代码中设置修复该问题.
java中内存泄漏.docx
详细介绍Java的内存管理与内存泄露 作为Internet最流行的编程语言之一...这里与大家分享我们在开发过程中遇到的Java内存泄漏的检测和处理解决过程. 本文先介绍Java的内存管理,以及导致Java内存泄露的原因。 ........
有关java内存泄露的详细资料,Java与C语言的内存管理模型,内存泄漏方式
java内存泄露问题的定位与详细的分析过程
Java内存泄露及内存无法回收解决方案,深入讲解相关原理及相关过程。