Android内存tips
1. Android应用程序的默认最大内存值为16M,如何修改Android应用程序的默认最大内存值?
修改或添加/system/build.prop中的配置项:
root@NX551J:/system # cat build.prop | grep 'dalvik.vm'
cat build.prop | grep 'dalvik.vm'
dalvik.vm.heapminfree=4m
dalvik.vm.heapstartsize=16m
dalvik.vm.heapgrowthlimit=256m
dalvik.vm.heapsize=512m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapmaxfree=8m
2. 查看当前进程内存使用情况:
dumpsys meminfo <package_name> or <pid>
dumpsys meminfo 'cn.txh.demo'
Applications Memory Usage (kB):
Uptime: 372832186 Realtime: 504869683
** MEMINFO in pid 15655 [cn.nubia.photoeditor] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 6568 6036 0 0 12288 10331 1956 (进程原生内存堆使用详情)
Dalvik Heap 80643 80148 0 0 82572 76595 5977 (进程GC内存堆使用详情)
3. GC
Java虚拟机在运行Java程序的过程中,可以自动回收不再使用的对象实例;
GC线程运行时会中断主线程,若中断时间过长,可能出现ANR。
常见的垃圾回收算法:
引用计数法(Reference Counting), 标注并清理(Mark and Sweep), 拷贝(Copying), 逐代回收(Generational).
Android采用的是标注并清理,以及拷贝GC。
Logcat中的GC信息:
格式[GC的原因][回收的内存总量],[GC堆内存的统计信息],[外部内存的统计信息],[中断时间]
例:
D/dalvikvm( 823):GC_FOR_MALLOC freed 2732k, 26% free 18834k/25287k, paused 1302ms
D/dalvikvm( 823):GC_CONCURRENT freed 7k, 15% free 21564k/25287k, paused 38ms+335ms
D/dalvikvm( 397):GC_EXPLICIT freed 223 objects / 12976 bytes in 9ms
GC的原因:
(1) GC_FOR_MALLOC:
表示内存垃圾回收过程是因为在分配内存空间(如创建对象)时,内存不够而引发的;
(2) GC_EXPLICIT:
表示GC是被显示请求触发的,如通过System.gc调用、一个Java线程被杀死或Binder通信中断等引起的;
(3) GC_CONCURRENT:
表明GC是在内存使用率达到一定的警戒线时,自动触发的;
(4) GC_BEFORE_OOM:
表明在虚拟机抛出内存不够异常(OOM)之前,执行最后一次回收内存垃圾;
外部内存的统计信息:是原生(C/C++)内存堆的使用情况,对于Android3.0以前的版本,Android应用中的所有的位图都是分配在C/C++内存堆上
的,在Java的GC内存堆上只有一小块内存用于描述其信息。这种内存分配方法使得位图导致的内存泄漏很难被发现和跟踪,因此在3.0以后的版
本,位图也分配在了Java的GC内存堆上了。
4. 调查内存泄漏工具
Shallow size: 指对象本身占用的内存空间大小,而不考虑被其引用到的内存总量;
Retained size:指对象的Shallow size加上从其开始所能访问到的所有对象的Shallow size之和。
换句话说,Retained size是该对象被GC之后所能回收到内存的总和
如果内存使用率一直增长,GC内存堆大小也一直增长,基本可以断定应用存在内存泄漏;
使用DDMS中dump HPROF file保存GC内存堆。
使用Eclipse MAT(Memory Analysis Toolkit 内存分析工具)和jHat(Java Heap Analysis Toolkit, Java堆分析工具)分析。
MAT只能分析符合标准JVM规范的HPROF文件。
Android SDK专门提供了一个工具"hprof-conv"将Android系统生成的HPROF文件转换成MAT可分析的格式。
例:hprof-conv xxx.hprof xxx.conv.hprof
5. 避免内存泄漏:
(1) 注册了监听,不用时取消监听
(2) 使用弱引用,在横竖屏切换时回收;(弱引用:不能将对象强制留在内存中)
Android内存tips的更多相关文章
- 大礼包!ANDROID内存优化(大汇总)
写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...
- ANDROID内存优化——大汇总(转)
原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...
- ANDROID内存优化(大汇总——中)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- Android内存泄漏检测利器:LeakCanary
Android内存泄漏检测利器:LeakCanary MAR 28TH, 2016 是什么? 一言以蔽之:LeakCanary是一个傻瓜化并且可视化的内存泄露分析工具 为什么需要LeakCanary? ...
- Android内存优化大全(中)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- ANDROID内存优化(大汇总——全)
写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...
- Android 内存管理 &Memory Leak & OOM 分析
转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...
- 【转载】Android内存泄露
相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力.今天我们就谈谈在Android平台下内存的管理之道,开始今 ...
- Android内存进程管理机制
参考文章: http://www.apkbus.com/android-104940-1-1.htmlhttp://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.h ...
随机推荐
- eclipse下实现热部署,tomcat不重新reload context
1. 打开server的编辑器 2. 在modules页签内,修改auto load属性为disabled
- 笨方法学Python 错误记录
ex8:忘记输入“空格”ex9:忘记输入“冒号”ex14:%前后要空格,否则errorex21:多个函数嵌套,漏写括号)ex24:%d,漏写d,导致程序错误:"""之间的 ...
- Python入门习题2.蟒蛇绘制(turtle库)
例2.调用turtle库中的若干函数来绘制蟒蛇,要求:(1)主体窗口宽650像素,高度350像素,窗口左侧与屏幕左侧像素距离200,窗口顶部与屏幕顶部像素距离200:(2)画笔落点在原点反向前进250 ...
- redis 持久化 哨兵 主从
Redis搭建步骤 环境: 三台机器 centos7 关闭防火墙 selinux Redis版本 3.0.5 依赖环境 yum install gcc-c++ ruby rubygems –y 把版 ...
- An easy problem (位运算)
[题目描述] 给出一个整数,输出比其大的第一个数,要求输出的数二进制表示和原数二进制表示下1的个数相同. [题目链接] http://noi.openjudge.cn/ch0406/1455/ [算法 ...
- NGUI动态字体的创建(font maker)
1,打开font maker 2,在font maker中创建选择动态字体 PS: 1,动态字体相对静态字体来说,动态字体比较消耗性能 2,静态字体是创建在图集中,这也是没那么消耗性能的原因
- R语言中的数据分析函数
数学类函数 在求有缺失值的子集的最大值时候,需要先用na.re=TRUE去掉缺失值. 求几个特定百分位数 round(x,n) n表示保留的小数点位数 分布类函数 rnorm,密度高的数字,生成概率就 ...
- openstack--all-in-one部署
安装过程 本次宿主机(即安装OpenStack的机器)的操作系统是CentOS 7.5.安装的OpenStack是目前最新的rocky版本,官方文档建议机器至少有16 GB的内存,处理器硬件虚拟化扩展 ...
- hive基础知识or基本操作命令
MySQL的密码是:123456 1.hive创建标准表(以后均可以按照这样创建): create [external] table [if not exists] records (year STR ...
- C#-弄懂泛型和协变、逆变
脑图概览 泛型声明和使用 协变和逆变 <C#权威指南>上在委托篇中这样定义: 协变:委托方法的返回值类型直接或者间接地继承自委托前面的返回值类型; 逆变:委托签名中的参数类型继承自委托方法 ...