Android内存泄露总结(附内存检测工具)
Java 中的内存分配 主要是分三块: 静态储存区:编译时就分配好,在程序整个运行期间都存在。它主要存放静态数据和常量。 栈区:当方法执行时,会在栈区内存中创建方法体内部的局部变量,方法结束后自动释放内存。 堆区:通常存放 new 出来的对象。由 Java 垃圾回收器回收。 栈与堆的区别 栈内存用来存放局部变量和函数参数等。它是先进后出的队列,进出一一对应,不产生碎片,运行效率稳定高。当超过变量的作用域后,该变量也就无效了,分配给它的内存空间也将被释放掉,该内存空间可以被重新使用。 堆内存用于存放对象实例。在堆中分配的内存,将由Java垃圾回收器来自动管理。在堆内存中频繁的 new/delete 会造成大量内存碎片,使程序效率降低。 对于非静态变量的储存位置,我们可以粗暴的认为: 局部变量位于栈中(其中引用变量指向的对象实体存在于堆中)。 成员变量位于堆中。因为它们属于类,该类最终被new成对象,并作为一个整体储存在堆中。 四种引用类型的介绍 GC 释放对象的根本原则是该对象不再被引用(强引用)。那么什么是强引用呢? 强引用(Strong Reference) 我们平常用的最多的就是强...
