📍

选择城市

立即咨询
精选文章 / 深度解读

“内存优化”为何至今依旧是 Android 开发者所需要攻破的难题

什么是内存?● 内存(Memory) 是计算机的重要部件 ,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据;它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中 ......

什么是内存?


内存(Memory) 是计算机的重要部件 ,也称内存储器和主存储器,它用于暂时存放CPU中的运算,以及与硬盘等外部存储器交换的数据;它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平;只要计算机开始运行,系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来

CPU只能访问其寄存器(Register)和内存(Memory), 无法直接访问硬盘(Disk); 存储在硬盘上的数据必须首先传输到内存中才能被CPU访问。从访问速度来看,对寄存器的访问非常快,通常为1纳秒; 对内存的访问相对较慢,通常为100纳秒(使用缓存加速的情况下);而对硬盘驱动器的访问速度最慢,通常为10毫秒

Android内存管理机制

Android 运行时 (ART) 和 Dalvik 虚拟机使用分页和内存映射来管理内存;这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在 RAM 中,并且无法换出。要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。这种情况有一个例外:对于任何未经修改的内存映射文件(如代码),如果系统想要在其他位置使用其内存,可将其从 RAM 中换出

Android 内存回收机制

● Android 设备每打开一个 APP, 内存都是弹性分配的,并且其分配值与最大值受具体设备而定

● 注意区分如下两种 OOM 场景:

● 内存真正不足:例如 APP 当前进程最大内存上限为 8 GB ,当超过这个值就表明内存真正不足了

● 可用内存不足:手机系统内存极度紧张,就算 APP 当前进程最大内存上限为 8 GB ,我们只分配了 6 GB ,也会产生内存溢出,因为系统的可用内存不足了

共享内存

● Android系统通过下面几种方式来实现共享内存:


Android应用的进程都是从一个叫做Zygote的进程fork出来的;Zygote进程在系统启动,并载入通用的framework的代码与资源之后开始启动。为了启动一个新的程序进程,系统会fork Zygote进程生成一个新的进程,然后在新的进程中加载并运行应用程序的代码;这就使得大多数的RAM pages被用来分配给framework的代码,同时促使RAM资源能够在应用的所有进程之间进行共享

大多数static的数据被mmapped到一个进程中;这不仅仅让同样的数据能够在进程间进行共享,而且使得它能够在需要的时候被paged out;常见的static数据包括Dalvik Code、app resources、so文件等

● 大多数情况下,Android通过显式的分配共享内存区域(例如ashmem或gralloc)来实现动态RAM区域能够在不同进程之间进行共享的机制 ; 比如,Window Surface在App与Screen Compositor之间使用共享的内存,Cursor Buffers在Content Provider与Clients之间共享内存

限制内存

● 为了整个系统的内存控制需要,Android系统为每一个应用程序都设置一个硬性的Dalvik Heap Size最大限制阈值,这个阈值在不同的设备上会因为RAM大小不同而各有差异 ; 如果你的应用占用内存空间已经接近这个阈值,此时再尝试分配内存的话,很容易引发OutOfMemoryError错误

● ActivityManager.getMemoryClass()可以用来查询当前应用的Heap Size阈值,这个方法会返回一个整数,表明应用的Heap Size阈值是多少MB(Megabates)

优化内存的意义

● 减少OOM,提高应用稳定性

● 减少卡顿,提高应用流畅度(如GC次数增多导致)

● 减少内存占用,提高应用后台运行时的存活率(防止Low Memory Killer)

● 减少异常发生和代码逻辑隐患

内存优化,应该从哪里着手

近段时间对 Android 内存优化所拥有的特性进行了整合,整理成了文档,因为篇幅有限,有需要更多 Android 开发相关资料的同学

如果需要领取这份资料完整版的话,可以顺手给我点赞评论支持一下

资料获取方式:私信我发送“进阶”免费获取

由于文章篇幅有限,仅以图片形式展示:








资料获取方式私信我发送“进阶资料”免费获取

Android架构师之路还很漫长,与君共勉

PS:有问题欢迎指正,欢迎大家点赞评论,可以在评论区留下你的建议和感受

阅读重点

这篇内容能帮你快速理解什么

帮助快速理解主题

通过更完整的主题说明和结构表达,帮助用户更快抓住重点,也让搜索系统更容易识别页面主题。

帮助判断下一步动作

让访问者快速理解当前问题、可行方法以及下一步应该继续看案例、看服务还是直接沟通。

帮助继续浏览与沟通

文章页不只是获取流量,也承担继续阅读、查看服务和发起咨询的承接作用。

继续了解

继续了解这个主题前,你可能还关心这些问题

为什么这类主题适合写成文章?

因为很多用户会通过问题词、对比词和方案词进入网站,文章页越清楚,越容易覆盖更具体的需求。

为什么文章页不能只有正文?

仅有正文不利于继续浏览和转化,文章页还需要总结、问答、相关推荐与咨询入口来承接用户。

看完之后下一步可以做什么?

可以继续看同类文章、服务页与案例页,也可以直接沟通官网升级与搜索优化需求。

这篇文章能帮助我解决什么具体问题?

这篇文章围绕当前主题提供了详细的解决方案、操作步骤和注意事项,帮助你快速理解核心要点并应用到实际场景中。

如何判断这篇文章的内容是否权威可靠?

内容基于实际项目经验和技术实践编写,结合行业标准和最佳实践,同时提供案例数据和方法论支撑,确保专业性和可操作性。

这类内容对SEO和网站排名有什么帮助?

优质的长文内容和FAQ结构能够提升页面主题相关性、增加用户停留时间、降低跳出率,这些都有助于搜索引擎评估页面质量并提升排名表现。

AI搜索引擎会如何理解和引用这类内容?

AI搜索系统会提取文章的实体信息、观点结论和结构化问答,当用户提出相关问题时,可能会引用本文作为答案来源或参考依据。

如果我有更多相关问题可以咨询谁?

可以通过页面底部的联系方式直接咨询我们的专业团队,包括电话、QQ或在线表单,我们会根据你的具体情况提供针对性的建议和方案。

这篇文章和同类内容有什么不同之处?

本文不仅提供理论知识,还包含实战经验、避坑指南和可执行的行动建议,同时兼顾传统SEO和新兴的GEO生成式搜索优化视角。

多久需要更新一次这类内容以保持时效性?

建议每季度审查并更新一次关键数据和案例,如果涉及技术工具或算法变化则需要更频繁地维护,确保内容持续为用户提供准确价值。