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的更多相关文章

  1. 大礼包!ANDROID内存优化(大汇总)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  2. ANDROID内存优化——大汇总(转)

    原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...

  3. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  4. Android内存泄漏检测利器:LeakCanary

    Android内存泄漏检测利器:LeakCanary MAR 28TH, 2016 是什么? 一言以蔽之:LeakCanary是一个傻瓜化并且可视化的内存泄露分析工具 为什么需要LeakCanary? ...

  5. Android内存优化大全(中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  6. ANDROID内存优化(大汇总——全)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  7. Android 内存管理 &Memory Leak & OOM 分析

    转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...

  8. 【转载】Android内存泄露

    相信一步步走过来的Android从业者,每个人都会遇到OOM的情况.如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力.今天我们就谈谈在Android平台下内存的管理之道,开始今 ...

  9. Android内存进程管理机制

    参考文章: http://www.apkbus.com/android-104940-1-1.htmlhttp://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.h ...

随机推荐

  1. docker 搭建gitlab

    https://docs.gitlab.com/omnibus/docker/ https://blog.csdn.net/m0_37444820/article/details/81147452 h ...

  2. Red Hat Linux下安装JDK

    1. 下载Linux平台的JDK 下载对应操作系统的jdk,操作系统是32位的就下32位的jdk,64位的就下64位的jdk.下错了装不上的. 下载地址:http://www.Oracle.com/t ...

  3. shell脚本一一项目3

    主题:批量创建100个用户并设置密码 脚本内容 user_list=$@user_file=./user.infofor USER in ${user_list};do if ! id $USER & ...

  4. openstack介绍及共享组件——消息队列rabbitmq

    一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 IT系统架构的发展到目前为止大致 ...

  5. PostgreSQL 在视频、图片去重,图像搜索业务中的应用

    摘要: PostgreSQL 在视频.图片去重,图像搜索业务中的应用作者digoal日期2016-11-26标签PostgreSQL , Haar wavelet , 图像搜索 , 图片去重 , 视频 ...

  6. FTP 服务器搭建(基于 CentOS 7)

    参考资料: 檔案伺服器之三: FTP 伺服器 用 vsftpd 配置FTP服务器 vsftpd 的所有选项 注意,如果要所有人同时编辑 FTP 上的所有文件,可以将 vsftpd.conf 配置文件中 ...

  7. IDF-CTF-图片里的英语 writeup

    题目链接:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=34 一恒河沙中有三千世界,一张图里也可以有很多东西. ...

  8. kmp(多次无重叠匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面 ...

  9. 12、numpy——数学函数

    NumPy 数学函数 NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等. 1.三角函数 NumPy 提供了标准的三角函数:sin().cos().tan(). i ...

  10. 分布式ID增强篇--优化时钟回拨问题

    原生实现 本文承接sharding-jdbc源码之分布式ID,在这篇文章中详细介绍了sharding-jdbc的分布式ID是如何实现的:很遗憾的是sharding-jdbc只是基于snowflake算 ...