我是靠谱客的博主 乐观香菇,最近开发中收集的这篇文章主要介绍Android 内存优化内存优化内存分析工具 Android内存管理机制内存优化体系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

内存优化

RAM和ROM优化

RAM优化

ROM优化

内存问题

内存抖动

内存泄漏

内存溢出

内存分析工具 

Profiler

MAT

LeakCanary

Android内存管理机制


内存优化

RAM和ROM优化

RAM优化

降低运行时的内存

1. 防止应用发生OOM。

2. 降低应用由于内存过大被LMK机制杀死的概率。

3. 避免不合理使用内存导致GC次数增多,从而导致应用发生卡顿。

ROM优化

缩小Apk的体积

内存问题

内存抖动

频繁地创建和销毁对象,内存波动图形呈锯齿状

该问题在 Dalvik虚拟机 上会 更加明显,而 ART虚拟机 在 内存管理跟回收策略 上都做了 大量优化,内存分配和GC效率相比提升了5~10倍,所以情况比 Dalvik虚拟机好。

内存泄漏

内存泄漏就是 在当前应用周期内不再使用的对象被GC Roots引用,导致不能回收,使实际可使用内存变小

内存溢出

即OOM,OOM时会导致程序异常。Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。单个应用可用的最大内存对应于 /system/build.prop 文件中的 dalvik.vm.heapgrowthlimit。

此外,除了因内存泄漏累积到一定程度导致OOM的情况以外,也有一次性申请很多内存,比如说 一次创建大的数组或者是载入大的文件如图片的时候会导致OOM。而且,实际情况下 很多OOM就是因图片处理不当 而产生的。

内存分析工具 

Profiler

Android Profiler 工具常用功能

MAT

使用 Memory Analyzer ( MAT ) 工具分析内存

LeakCanary

自动化 内存泄漏检测神器

Android内存管理机制

Java 内存分配

Java的 内存分配区域 :

1、方法区:
2、虚拟机栈:Java变量引用
3、本地方法栈:native变量引用
4、堆:对象
5、程序计数器:计算当前线程的当前方法执行到多少行

Java 内存回收算法 

Java 内存回收算法

内存优化体系

内存泄漏:
 内存中存在已经没有用的对象。它的 表现 一般为  内存抖动、可用内存逐渐减少。
它的 危害 即会导致 内存不足、GC频繁、OOM。

而对于 内存泄漏的分析 一般可简述为如下 两步:

1)、使用 Memory Profiler 初步观察。
2)、通过 Memory Analyzer 结合代码确认。

MAT的使用

MAT的使用

图片优化 

Android Bitmap 内存分配的变化

在Android 3.0之前

1、Bitmap 对象存放在 Java Heap,而像素数据是存放在 Native 内存中的。
2、如果不手动调用 recycle,Bitmap Native 内存的回收完全依赖 finalize 函数回调,但是回调时机是不可控的。

Android 3.0 ~ Android 7.0


将 Bitmap对象 和 像素数据 统一放到 Java Heap 中,即使不调用 recycle,Bitmap 像素数据也会随着对象一起被回收。
但是,Bitmap 全部放在 Java Heap 中的缺点很明显,大致有如下两点:

1、Bitmap是内存消耗的大户,而 Max Java Heap 一般限制为 256、512MB,Bitmap 过大过多容易导致 OOM。
2、容易引起大量 GC,没有充分利用系统的可用内存。

Android 8.0及以后

1、使用了能够辅助回收 Native 内存的 NativeAllocationRegistry,以实现将像素数据放到 Native 内存中,并且可以和 Bitmap 对象一起快速释放,最后,在 GC 的时候还可以考虑到这些 Bitmap 内存以防止被滥用。
2、Android 8.0 为了 解决图片内存占用过多和图像绘制效率过慢 的问题新增了 硬件位图 Hardware Bitmap。

线程优化

每个线程初始化都需要 mmap 一定的栈大小,在默认情况下初始化一个线程需要 mmap 1MB 左右的内存空间。
在 32bit 的应用中有 4g 的 vmsize,实际能使用的有 3g+,这样一个进程 最大能创建的线程数 可以达到 3000个,但是,linux 对每个进程可创建的线程数也有一定的限制(/proc/pid/limits),并且,不同厂商也能修改这个限制,超过该限制就会 OOM。

最后

以上就是乐观香菇为你收集整理的Android 内存优化内存优化内存分析工具 Android内存管理机制内存优化体系的全部内容,希望文章能够帮你解决Android 内存优化内存优化内存分析工具 Android内存管理机制内存优化体系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部