【php精品源码栏目提醒】:网学会员,鉴于大家对php精品源码十分关注,论文会员在此为大家搜集整理了“【精品】Android开发内存泄漏及检查工具使用培训资料 - 其它资料”一文,供大家参考学习!
Android 开发内存泄漏及检查工具使用培 训资料 目录1 内存泄露 .............................................................................................................................................. 3 1.1 内存泄露的概念 ..................................................................................................................... 3 1.2 开发人员注意事项 ................................................................................................................. 4 1.3 Android(java)中常见的引起内存泄露的代码示例 ........................................................ 4 1.3.1 查询数据库没有关闭游标 .......................................................................................... 6 1.3.2 构造 Adapter 时,没有使用缓存的 convertView ................................................... 6 1.3.3 Bitmap 对象不在使用时调用 recycle释放内存 .................................................... 7 1.3.4 释放对象的引用.......................................................................................................... 8 1.3.5 其他 .............................................................................................................................. 92 内存泄露的分析工具 ......................................................................................................................... 9 2.1 内存监测工具 DDMS --gt Heap ............................................................................................ 9 2.2 内存分析工具 MAT Memory Analyzer Tool ................................................................... 10 2.2.1 生成.hprof 文件 ......................................................................................................... 10 2.2.2 使用 MAT 导入.hprof 文件 ...................................................................................... 11 2.2.3 使用 MAT 的视图工具分析内存 ............................................................................ 12 21 内存泄露 Android 应用程序开发以 Java 语言为主,而 Java 编程中一个非常重要但却经常被忽视的问题就是内存使用的问题。
Java 的垃圾回收机制Garbage Collection 以下简称 GC使得很多开发者并不关心内存使用的生命周期,只顾着申请内存,却不手动释放废弃的内存,而造成内存泄露,引起很多问题,甚至程序崩溃。
Android 的虚拟机 Dalvik VM 和 java 虚拟机JVM 没有什么太大的区别,只是在字节码上稍做优化,所以 Android 应用开发中同样会出现内存泄露的问题。
而且由于 Android 智能平台主要用于嵌入式产品开发,可用的内存资源更加稀少,所以对于我们 Android 应用开发人员来说,就更该了解 Android 程序的内存管理机制,避免内存泄露的发生。
1.1 内存泄露的概念 在计算机科学中,内存泄漏memory leak指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。
内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。
然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。
一般我们常说的内存泄漏是指堆内存的泄漏。
堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。
应用程序一般使用 malloc,calloc,realloc,new 等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用 free 或 delete 释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
这里我们只简单的理解,在 java 程序中,如果已经不再使用一个对象,但是仍然有引用指向它,GC 就无法收回它,当然该对象占用的内存就无法再被使用,这就造成内存泄露。
可能一个实例对象的内存泄露很小,并不会引起很大的问题。
但是如果程序反复做此操作或者长期运行,造成内存不断泄露,终究会使程序无内存可用,只好被系统 kill 掉。
在以下情况,内存泄漏导致较严重的后果: 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理); 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时; 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候; 泄漏在操作系统内部发生; 泄漏在系统关键驱动中发生; 内存非常有限,比如在嵌入式系统或便携设备中; 当运行于一个终止时内存并不自动释放的操作系统(比如 AmigaOS)之上,而且一旦丢失只能通过重启来恢复。
31.2 开发人员注意事项 对于开发者,对待内存泄露应该以防为主,以治为辅,因为一旦造成内存泄露,追查原因并不容易,虽然有工具可以利用,但是还是会耗费不必要的时间和精力来分析内存使用报告和反复搜查代码。
为了开发高性能和高质量的软件,防止出现豆腐渣工程的出现,我们要知道什么时候用 gc 什么时候用 recycle 以及到底用不用 finalization,因为 Java 对内存的分配只需要 new 开发者不需要显示的释放内存,但是这样造成的内存泄露问题的几率反而更高。
我们还需要: 1.了解 Java 的四种引用方式,比如强引用,软引用,弱引用以及虚引用。
一些复杂些的程序在长期运行很可能出现类似 OutOfMemoryError 的异常。
2.并不要过多的指望 gc,不用的对象可以显示的设置为空,比如 objnull,这里 提示大家,java 的 gc 使用的是一个有向图,判断一个对象是否有效看的是其他的对象能到达这个对象的顶点,有向图的相对于链表、二叉树来说开销是可想而知。
3.Android 为每个程序分配的对内存可以通过 Runtime 类的 totalMemory freeM emory两 个 方 法 获 取 VM 的 一 些 内 存 信 息 , 对 于 系 统 heap 内 存 获 取 , 可 以 通 过 Dalvik.VMRuntime 类的 getMinimumHeapSize方法获取最小可用堆内存,同时显示释放软引用可以调用该类的 gcSoftReferences方法,获取更多的运行内存。
4.对于多线程的处理,如果并发的线程很多,同时有频繁的创建和释放,可以通过concurrent 类的线程池解决线程创建的效率瓶颈。
5.不要在循环中创建过多的本地变量。
Java 中的引用简介:在 Java 中内存管理,引用分为四大类,强引用 HardReference、弱引用 WeakReference、软引用 SoftReference 和虚引用 PhantomReference。
它们的区别也很明显,HardReference 对象 是 即 使 虚 拟 机 内 存 吃 紧 抛 出 OOM 也 不 会 导 致 这 一 引 用 的 对 象 被 回 收 , 而WeakReference 等更适合于一些数量不多
上一篇:
【精品】CBX开发人员手册
下一篇:
鹤壁职业技术学院电子信息工程系关于毕业设计的有关规定