还记得这张图吗?记得当年初学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,进和出,没错,举几个例子:如我们的软件在系统中是一个个的进程,创建/销毁,在进程中有一个个的线程,创建/销毁,在线程中有一个个的对象,创建/销毁,在一个对象中有一个个方法,创建/销毁,在方法中有一个个成员变量和局部变量,创建/销毁。你现在是不是已经找到优化的方向了,总结如下:
-
优化进程
-
优化线程
-
优化对象
-
优化方法
-
优化变量
这才是我们要找的底层逻辑不是吗?任何问题的解决,我想都该有一个合理的思维框架,这样才能事半功倍,有迹可循。