什么是内存?● 内存(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内链建设优化有什么作用。
很多新手小白拿到一个新的站点的时候,都会考虑如何快速提升网站的权重及排名,想到的更多的办法还是外链的发布以及站捏文章的更新,站内大家都知道,只要保持稳定的高质量原创更新,让搜索引擎形成良好的抓取频次就可以。但是严格来说。对于站内优化来说,内链的建设也成为了网站整体不可分割的主题之一。曾几何时那句内容...
年入300万的舅妈教我的赚钱秘诀:穷,不是你的错,而是你不对!
我是小萌姐姐,自由撰稿人。点击右上角“关注”,为您分享自媒体和副业。 钱不是万能的,但没有钱是万万不能的!谈钱不俗气,这句话是有一定道理的。由于受儒家传统思想的影响,人们往往羞于谈钱,对财富的追逐,也很含蓄,好像生怕别人看轻了自己一样。有...
手把手教你写营销策略/策划,建议收藏。
这篇方法论文章是数英网收藏数最高的文章之一,也获得了数英网、梅花网、鸟哥笔记、领英、Socialmarketing等多个主流站的首页推荐和公众号转载。作者”老泡OG“从亲身经历的互联网大厂0到1多个中提炼经验,从“策划概念理解、营销策划的框架、策划的...
我来教你拒绝竞价推广,云裂变小编有理由。
竞价推广比如百度,大家也比较熟悉,但熟悉的人都知道,百度推广有一违背企业初衷的弊端,就是烧钱。 其次,竞价推广的专业性(主要指需要专业人员进行操作)限制其管理,造成管理剪不断,礼还乱的尴尬局面。 再次,竞价性的推广需要大量的资金投入,竞争激烈的词,被访问一次可以达到数元甚至数十元...
拼多多销售攻略:如何让你的商品脱颖而出
随着电商的发展,拼多多这个平台已经成为了许多商家的新宠。但是,如何在拼多多上成功销售,却是许多新手商家的难题。今天,我将为你揭秘拼多多销售的秘诀,让你的商品在众多竞品中脱颖而出。 我们要明白,拼多多的销售策略和其他电商平台有所不同,它更注重的是商品的性价比和社交属性。因此,要想在拼多...
苹果解榜|搜索联想词算法大整顿,热门搜索榜惨遭血洗!微信积分墙、肉刷、机刷ASO干预恢复…
小猫试玩 积分墙 自助投放系统: e.xiaomaowan.com 新年伊始,苹果App Store便备受瞩目。 半月不到,锁榜两次;付费榜稍有动作便被 清榜, 免费榜一如既往的干净; 热搜榜被彩票与棋牌关键词霸占,一度让苹果用户抓狂。诸如此类的问题,比比皆是...






