当前位置:网站首页>想要彻底搞的性能优化,得先从底层逻辑开始了解~
想要彻底搞的性能优化,得先从底层逻辑开始了解~
2022-07-26 23:20:00 【码中之牛】
前言
性能优化仿佛成了每个程序员开发的必经之路,要想出人头地,与众不同,你还真需要下点功夫去研究Android的性能优化,比如说,从优化应用启动、UI加载、再到内存、CPU、GPU、IO、还有耗电等等,当你展开一个方面做优化的时候,是不是也曾跟我一样,一头雾水,摸不着头脑,甚至找不到方法,然后看了大量的文章,最后记住了一些别人消化过的方式方法,就觉得自己学会了,其实我现在并不这么认为,我觉得性能优化肯定有一个固定的思维框架,让我们自发的去发现问题,然后解决问题,只有做到了自己发现,这样我们才能跟别人不一样,才能真正的掌握性能优化不是吗?下面就跟我一起看清楚性能优化的底层逻辑。
来看下Android系统架构

还记得这张图吗?记得当年初学android第一节课,老师就拿了这张图,甚至说,到目前为止,我才能更深刻的理解这张图,下面由我来重新介绍这张图,也许会给你带来不一样的视角。你有没有发现,其实整个Android系统只分为两大块,Linux + Android 虚拟机,其他的部分不都是运行在这个上面的产物吗?(当然有些人会说,虚拟机不也是运行在linux的产物吗?答:是的。)如果你没明白,请允许我画个图,你也许就能明白我说的。请看:

程序A、B都运行在虚拟机中,而Java需要跟Native交互需要用到JNI,JNI和C和C++进行互相调用。最终C与Linux内核进行交互。 通过上图,如果让你抓重点的话,其实就两大模块对吧,一个是linux,一个是Android虚拟机。回到优化,那是不是说我们只需要做好两件事,一个是优化linux,一个是优化虚拟机呢?但其实我想告诉你,性能优化最终其实就一件事,基于 Linux对Android的运行时优化,这就是我们找到的最基础的底层逻辑。
底层逻辑下的本质
让我们基于Linux对Android运行时的优化,太抽象了,如果让你具体一点,你会想到什么?
硬件角度
先从硬件的角度出发,不管是Linux还是Android运行时,其实最终都牵扯到硬件资源的使用,那是不是说,如何做到硬件资源的合理运用,就是我们要做的呢?我觉得没错,首先你要知道硬件资源中最主要的资源是计算资源和存储资源。
- 计算资源主要是CPU、GPU,比如我们会考虑CPU占用率来作为优化的标准
- 存储资源主要是虚拟内存和物理内存(磁盘),比如我们会考虑内存占用,磁盘占用等
简单说下如何利用好呢?
- 比如现在的CPU都是多核的,能利用好多核计算,不是单核
- 比如运行内存12G,那我们是不是可以考虑牺牲一些内存在提高性能呢?对的你是不是想说Google Chrome能占7、8个G内存?哈哈,因为Google比较喜欢拿空间资源换性能。
简单总结方法:
- 合理利用CPU资源
- 合理管理内存资源
至于再细化到如何做,这个就需要你自己去摸索了。
软件角度
从软件角度出发,其实就是我们开发的应用软件,操作系统除了计算资源和内存资源的管理,其他都是通过IO来管理,那么软件的本质其实就是IO,进和出,没错,举几个例子:如我们的软件在系统中是一个个的进程,创建/销毁,在进程中有一个个的线程,创建/销毁,在线程中有一个个的对象,创建/销毁,在一个对象中有一个个方法,创建/销毁,在方法中有一个个成员变量和局部变量,创建/销毁。你现在是不是已经找到优化的方向了,总结如下:
- 优化进程
- 优化线程
- 优化对象
- 优化方法
- 优化变量
这才是我们要找的底层逻辑不是吗?任何问题的解决,我想都该有一个合理的思维框架,这样才能事半功倍,有迹可循。
总结
篇幅不长,讲了我对性能优化的深刻的理解,也许说出来你都懂,是的,大道理大家都懂,加油,你是最胖的。
下面是我闲暇时刻整理的一些精品资料。可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。有需要的小伙伴可以点击这里查看获取方式 传送门直达 !!!里面记录许多Android 相关学习知识点。


边栏推荐
- JMeter下载安装
- Summary of dataset operations in ppocrlabel format.
- 中断、信号、系统调用
- [dimension reduction blow, take you to learn CPU in depth (Part 1)]
- Hcip day 6 OSPF static experiment
- OSPF summary (mind map)
- [brother Yang takes you to play with the linear table (4) - chain queue]
- [draw sherpinski triangle in C language]
- Prometheus 运维工具 Promtool (三) Debug 功能
- OSPF总结(思维导图)
猜你喜欢

NAT network address conversion experiment

Hcip day 4 OSPF routing protocol

静态路由综合实验

静态路由实验配置
![[draw rectangular coordinate system in C language]](/img/85/cf0c8a8da647888acce5ce3ee871b2.png)
[draw rectangular coordinate system in C language]

OSPF summary (mind map)

C language - characters and strings, arithmetic operators, type conversions

Hcip day 5 OSPF extended configuration experiment

Is it useful to lie down with your eyes closed when you can't sleep?

见证中国网安力量 “解码2022中国网安强星”即将启航
随机推荐
[after this article, learning the linked list is a smooth way]
【用C语言绘制直角坐标系】
Prompt to leave the page
测试工作十年,想对还在迷茫的朋友说:一点要做好个人规划...
【洋哥带你玩转线性表(三)——双向链表】
【你了解Cache吗——全面理解高速缓冲存储器】
swiperjs自定义宽度
HCIP-第五天-OSPF扩展配置实验
I wish you a happy Chinese Valentine's day and invite you to read the source code together
从单表到分表实现数据平滑迁移
OSPF总结(思维导图)
【洋哥带你玩转线性表(一)——顺序表】
How many holes have you stepped on in BigDecimal?
f8抓交通、f9抓兔子、f10turtle
After ten years of testing, I want to say to my friends who are still confused: one thing is to do a good job in personal planning
Summary of dataset operations in ppocrlabel format.
动态路由配置
[draw rectangular coordinate system in C language]
Is it necessary to open an account on site for securities speculation? Is it safe to open an account online
Static routing experiment configuration