視頻網(wǎng)站的服務(wù)器建設(shè)百度熱搜榜小說排名
前言
性能優(yōu)化仿佛成了每個程序員開發(fā)的必經(jīng)之路,要想出人頭地,與眾不同,你還真需要下點功夫去研究Android的性能優(yōu)化,比如說,從優(yōu)化應用啟動、UI加載、再到內(nèi)存、CPU、GPU、IO、還有耗電等等,當你展開一個方面做優(yōu)化的時候,是不是也曾跟我一樣,一頭霧水,摸不著頭腦,甚至找不到方法,然后看了大量的文章,最后記住了一些別人消化過的方式方法,就覺得自己學會了,其實我現(xiàn)在并不這么認為,我覺得性能優(yōu)化肯定有一個固定的思維框架,讓我們自發(fā)的去發(fā)現(xiàn)問題,然后解決問題,只有做到了自己發(fā)現(xiàn),這樣我們才能跟別人不一樣,才能真正的掌握性能優(yōu)化不是嗎?下面就跟我一起看清楚性能優(yōu)化的底層邏輯。
來看下Android系統(tǒng)架構(gòu)

還記得這張圖嗎?記得當年初學android第一節(jié)課,老師就拿了這張圖,甚至說,到目前為止,我才能更深刻的理解這張圖,下面由我來重新介紹這張圖,也許會給你帶來不一樣的視角。你有沒有發(fā)現(xiàn),其實整個Android系統(tǒng)只分為兩大塊,Linux + Android 虛擬機,其他的部分不都是運行在這個上面的產(chǎn)物嗎?(當然有些人會說,虛擬機不也是運行在linux的產(chǎn)物嗎?答:是的。)如果你沒明白,請允許我畫個圖,你也許就能明白我說的。請看:

程序A、B都運行在虛擬機中,而Java需要跟Native交互需要用到JNI,JNI和C和C++進行互相調(diào)用。最終C與Linux內(nèi)核進行交互。通過上圖,如果讓你抓重點的話,其實就兩大模塊對吧,一個是linux,一個是Android虛擬機?;氐絻?yōu)化,那是不是說我們只需要做好兩件事,一個是優(yōu)化linux,一個是優(yōu)化虛擬機呢?但其實我想告訴你,性能優(yōu)化最終其實就一件事,基于 Linux對Android的運行時優(yōu)化,這就是我們找到的最基礎(chǔ)的底層邏輯。
底層邏輯下的本質(zhì)
讓我們基于Linux對Android運行時的優(yōu)化,太抽象了,如果讓你具體一點,你會想到什么?
硬件角度
先從硬件的角度出發(fā),不管是Linux還是Android運行時,其實最終都牽扯到硬件資源的使用,那是不是說,如何做到硬件資源的合理運用,就是我們要做的呢?我覺得沒錯,首先你要知道硬件資源中最主要的資源是計算資源和存儲資源。
計算資源主要是CPU、GPU,比如我們會考慮CPU占用率來作為優(yōu)化的標準
存儲資源主要是虛擬內(nèi)存和物理內(nèi)存(磁盤),比如我們會考慮內(nèi)存占用,磁盤占用等
簡單說下如何利用好呢?
比如現(xiàn)在的CPU都是多核的,能利用好多核計算,不是單核
比如運行內(nèi)存12G,那我們是不是可以考慮犧牲一些內(nèi)存在提高性能呢?對的你是不是想說Google Chrome能占7、8個G內(nèi)存?哈哈,因為Google比較喜歡拿空間資源換性能。
簡單總結(jié)方法:
合理利用CPU資源
合理管理內(nèi)存資源
至于再細化到如何做,這個就需要你自己去摸索了。
軟件角度
從軟件角度出發(fā),其實就是我們開發(fā)的應用軟件,操作系統(tǒng)除了計算資源和內(nèi)存資源的管理,其他都是通過IO來管理,那么軟件的本質(zhì)其實就是IO,進和出,沒錯,舉幾個例子:如我們的軟件在系統(tǒng)中是一個個的進程,創(chuàng)建/銷毀,在進程中有一個個的線程,創(chuàng)建/銷毀,在線程中有一個個的對象,創(chuàng)建/銷毀,在一個對象中有一個個方法,創(chuàng)建/銷毀,在方法中有一個個成員變量和局部變量,創(chuàng)建/銷毀。你現(xiàn)在是不是已經(jīng)找到優(yōu)化的方向了,總結(jié)如下:
優(yōu)化進程
優(yōu)化線程
優(yōu)化對象
優(yōu)化方法
優(yōu)化變量
這才是我們要找的底層邏輯不是嗎?任何問題的解決,我想都該有一個合理的思維框架,這樣才能事半功倍,有跡可循。
總結(jié)
篇幅不長,講了我對性能優(yōu)化的深刻的理解,也許說出來你都懂,是的,大道理大家都懂,加油,你是最胖的。