Android性能优化解析--内存抖动

2022-05-20  本文已影响0人  安安_660c

从「内存抖动」说起

什么是内存抖动?

在程序里,每创建一个对象,就会有一块内存分配给它;每分配一块内存,程序的可用内存也就少一块;当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出动,来释放掉一部分不再被使用的内存。

Android 里的 View.onDraw() 方法在每次需要重绘的时候都会被调用,这就意味着,如果你在 onDraw() 里写了创建对象的代码,在界面频繁刷新的时候,你就也会频繁创建出一大批只被使用一次的对象,这就会导致内存占用的迅速攀升;然后很快,可能就会触发 GC 的回收动作,也就是这些被你创建出来的对象被 GC 回收掉。

[垃圾内存]太多了就被清理掉,这是 Java 的工作机制,这不是问题。问题在于,频繁创建这些对象会造成内存不断地攀升,在刚回收了之后又迅速涨起来,那么紧接着就是又一次的回收,对吧?这么往复下来,最终导致一种循环,一种在短时间内反复地发生内存增长和回收的循环。


这种循环往复的状态就像是水波纹的颤动一样,它的专业称呼叫做 Memory Churn,Android 的官方文档里把它翻译做了内存抖动。所以内存抖动其实并不是我们的内存在整体地进行摇晃这样神奇的事情,而仅仅是类似有一根搅拌棒轻轻地在内存的边界上进行搅动的样子——其实翻译成「内存搅动」好像也行哈?

怎么解决内存抖动

他没听过你可以告诉他呀!不是不能问内存抖动,而是如果你问了之后对方表示没听过,你应该进一步引导,比如你问他:那么,Android 官方建议我们不要在 onDraw() 里[创建对象]你知道吗?你知道为什么吗?如果他立即回答这会导致频繁触发内存回收,那不是证明他其实懂原理的吗?这时候你再告诉他,这就叫内存抖动,就行了。

而且也不要局限于这一个词,你还可以继续问:为什么在 onDraw() 里创建对象导致的结果是内存抖动而不是内存溢出?这种对于能力的考察比对词汇的考察重要多了。其实我也不是很确定这个问题是不是每个喜欢问内存抖动的面试官们都能回答上来,但这样问才是考察程序员能力的最好方式。

如果你在面试时问了内存抖动,但在对方表示没听过之后,你就不再进行任何的引导而是直接给对方扣了分,那你其实相当于在问:我这里有一个高端词汇,您听过吗?

说回到本质,学技术要学本质,但内存抖动并不是任何技术的本质。其实我今天也并不是在聊内存抖动这个词本身,而是想表达一种观点:

我们学技术,应该学得深,而且应该足够深,但不要被各种花里胡哨的词吓到,也不要被它们带着跑,我们要有自己的知识体系,有自己的成长逻辑。

那么关于性能优化的知识点有哪些呢?

性能优化相关知识点

360°Android全方面性能调优

《Android性能优化指南》

这里给大家分享一份《Android性能优化指南》,这份资料是整理了业内腾讯技术团队、阿里巴巴技术团队、美团技术团队、爱奇艺技术团队、得到技术团队、携程技术团队、蘑菇街技术团队等性能监控实战中遇到的问题以及解决方案。从各个方面对目标产品进行全方位的“优化”,让产品的性能得到提升。

完整学习笔记pdf全部免费分享,需要的朋友可以在【我的公众号】免费获取~

深入探索Android 稳定性优化

深入探索Android启动速度优化

Android性能优化之内存优化

深入探索Android内存优化(炼狱级)

完整学习笔记pdf全部免费分享,需要的朋友可以在【我的公众号】免费获取~

Android性能优化 —实战解析篇

完整学习笔记pdf全部免费分享,需要的朋友可以在【我的公众号】免费获取~

最后

学习之路犹如逆水行舟,不进则退,如果你松懈了, 那么你就退步了,而在Android开发工作中没有一门吃香独特的技术,想拿高薪也只能是望尘莫及的。做个勤奋向上的人,加紧学习,抓住中心,宁精勿杂,宁专勿多。

上一篇 下一篇

猜你喜欢

热点阅读