内存泄漏(Memory Leak):
程序中动态分配的堆内存,由于某种原因,程序未释放。造成系统内存的浪费,导致程序运行慢甚至系统崩溃。
与C++的内存不同,C++的内存泄露是由于分配了内存给某程序但是又没有回收造成的。
Java的内存泄露则是引用了一些垃圾对象,意思就是说程序引用了某些对象,但是又从来没有使用过。
-
申请内存:
java只要在代码中new
一个Object
,系统就会自己计算并分配好内存大小;而c/c++
则相对麻烦,需要调用malloc(size_t size)
,手动计算并传入要分配的内存值。 -
释放内存:
java
有回收机制,即GC
,不需要调用(也可以通过代码调用),一段时间后便会自己去回收已经不需要的内存;而c/c++
则需要手动调用free(void *ptr)
来释放指针指向的内存空间。
所以说java
比c/c++
更“高级”,但是java
的垃圾回收机制也没有那么智能,因为它在执行垃圾回收时需要根据一个标准去判断这块内存是否是垃圾,当这块垃圾不符合作为垃圾的标准时,GC
就不会去回收它,这就产生了内存泄漏,下面开始进入正题。
检测内存泄漏
adb shell dumpsys meminfo (pid)
反复地进入退出需要测试的目标activity,如果发现activity数量一直在增长,那么内存泄露一定是发生了。
内存泄漏检测
网友评论