爲何安卓機廣泛卡,廣泛慢? 能夠先參考一下這篇文章。 而我認爲這篇文章疏忽了一點,那就是安卓的應用層和虛擬機。 首先咱們來看看安卓系統的架構圖 它的最底層是linux內核,而它的應用層倒是要用java來作,而java的特性就是跨平臺,「一次編譯,到處運行」,java跨平臺的原理
。 看到了嗎?它跨平臺的緣由是由於它內置了一個「虛擬機」!!!它先用一個「編譯器」把JAVA代碼編譯成「字節碼」,而後虛擬機再負責把這些字節碼解釋,翻譯給CPU聽,這就至關於你全部的軟件都是跑在一臺虛擬的電腦上的!而在性能比手機更強勁的PC上,你跑一個虛擬機看看資源的佔用,hehe。 這就是爲何安卓手機廣泛卡慢的另外一個重要緣由。 咱們再來看看ios/mac os x的架構
雖然是mac os x,但也和ios八九不離十。 mac os x(如下簡稱x)系統的架構的最底層則是unix系的freebsd做爲內核,另和mach內核混合(mach兼容posix標準,而freebsd則是unix另外一支正朔,因此稱x爲unix-like並沒有不妥)的darwin內核
而x的應用層實現倒是用c/objective-c/swift純編譯性語言實現,效率天然高出很多。 話又說回來了,爲何一樣能夠跨平臺,爲何安卓不用c作應用層???而是選擇了java???要知道C也是一樣能夠跨平臺的啊! C的跨平臺方式是「一次編寫,到處編譯。」而java剛纔說過是「一次編譯,到處運行」。C語言的編譯方式是「C語言代碼先通過預處理,而後編譯成彙編語言,而後再從彙編編譯成二進制文件,而後再由二進制文件連接生成可執行文件」。那麼問題來了,安卓操做系統是面向嵌入式設備的,不光是給手機,還要給機頂盒,平板,上網本,電視機,飛行器,路由器網關,智能家居balabala一大堆設備用,這麼多設備,即使都是arm,也未必是同一個公司的芯片,這麼多硬件平臺,若是用C語言作APP,那就真得跟x同樣分爲「iphone版」和「ipad版」,並且你覺得這就完了?不!一樣的程序從手機編譯移植到ipad,能不能用還不必定!還得去從新測試,去維護......這都是人力啊,這都是物力啊,這都是財力啊!而安卓的「一次編譯,到處運行」的方式,編譯生成的.apk包我能夠同時給平板和智能手機用!而大多數狀況不會出錯(避免了依賴硬件,由於運行在虛擬機上)!這樣給公司節省了多少人力物力? 反觀ios平臺,ipad版上廢棄了很多工程,很多公司爲了兼顧ipad和iphone不得不兩頭跑,甚至開啓兩個項目組分頭維護,更多公司更是「只有iphone,沒有ipad」也是讓人無語到不行,可是要作跨平臺就要浪費更多的人力物力。然而硬件依賴方面,作ios系統的廠商目前只有apple一家,全部的設備包括ipad,iphone,iwatch,機頂盒硬件標準都是統一的,這個問題就沒有安卓那麼嚴重,安卓光手機一塊就有多少廠家在作?每家硬件平臺都不同,若是拿C實現應用層,最後又要跟unix世界同樣打的分崩離析,相同的程序在這家安卓機上沒問題在另外一家就出問題,再找一家壓根跑不起來。。。。 2333333.。。。。html