谷歌官方建议笔记——内存
来源:互联网 发布:java中webservice实例 编辑:程序博客网 时间:2024/05/16 10:52
原文
- 所有进程都是由Zygote fork出来的,所以大部分内存分页都是在进程间共享的
- Dalvik code、app resources、so文件都是放到mmap里面的,能适应内存页管理
- 部分IPC是使用目前声明(ashmem 、gralloc)的共享内存的
- 大块内存被释放后,理论上会被正常回收,但是小块的不一定。大概一页4k(getconf PAGESIZE,无法运行)
- Process被保存在LRU里面,内存不足时会弹出并回收内存。此时会考虑Process对内存的使用量,如果使用量小,保留的可能性就更大
- Service应该只在执行工作时再启动,而非一直运行。定时启动应该放到界面中,而非Service
- IntentService处理完一次HandleIntent就杀死自己
- 对于UI中的大图片之类的资源,应该在onTrimMemory()的时候进行释放
- 用getMemoryClass()检查可用内存大小,避免oom
- 尽量使用 SparseArray,SparseBooleanArray和LongSparseArray
- Enum相对于一个类,比static final耗内存很多,尽量避免
- 一个类占用500b内存,一个对象额外占用12-16b内存,HashMap的一个value额外需要32b内存
- 抽象和继承会影响内存和运行时间
- 反射可能会造成无用类的加载
- 一个单独进程会占用大概1.4MB内存,如果app分进程,应该有且仅有一个进程负责更新UI
- 如果UI进程同时Host了一个Content Provider,使用Content Provider时,UI内存也不会被回收
- 对于在loop中allocate的对象,可以使用对象池减少GC和allocate。最好在初始化的时候就分配大量对象。对象池中对象的成员变量一定要注意释放
- 读Bitmap的时候,inScale是直接跳读像素,但是inDensity是对邻近像素进行合并。inScale会快,但只能应用于整数比例缩放,所以可以先使用inScale到大概整数比例,再使用inDensity进行微调视频
- Enum会显著增大dex大小(compare with int,而非String),所以最好用int替代enum和String
- View持有其所在Activity的引用,View一旦leak会导致Activity不被回收。注意以下情形:
- 在回调函数中,不要持有View的引用
- 不要用Static的View对象
- 尽量不要在Collection里引用View对象
0 0
- 谷歌官方建议笔记——内存
- 谷歌官方建议笔记——性能
- 谷歌官方建议笔记——布局
- 谷歌官方建议笔记——电量
- 谷歌官方建议笔记——多线程
- 谷歌官方建议笔记——ANR、JNI
- 谷歌官方建议笔记——多线程
- Android代码内存优化建议-Android官方篇
- Android代码内存优化建议-Java官方篇
- Android代码内存优化建议-Java官方篇
- Android代码内存优化建议-Android官方篇
- Android代码内存优化建议-Java官方篇
- Android代码内存优化建议-Android官方篇
- Android代码内存优化建议-Java官方篇
- Android代码内存优化建议-Android官方篇
- Android代码内存优化建议-Android官方篇
- Android代码内存优化建议-Android官方篇
- Android代码内存优化建议-Android官方篇
- 浅析MVC和说媒的过程
- 一个点的经度和纬度,以这个点为圆心,1000米为半径,最大的经度和纬度,最小的经度和纬度
- 解读AFNetworking中Demo的MVC
- 根据一段代码理清一些变量,常量,数组,指针的关系及理解
- HDU-1147-Pick-up sticks
- 谷歌官方建议笔记——内存
- 中文 iOS/Mac 开发博客列表
- 虚幻4创建自己的UMG类别
- Java面试题全集(上)
- 两种无线接入技术综合介绍
- Eclipse光标变成黑色方块解决方法
- 有序数组合并
- 登录tomcat 时出现错误:tomcat You are not authorized to view this page
- package-info.java文件分析