如果安卓是基於c,而不是基於Java,APP運行起來會更快嗎?

yunyaling1987


首先說結論 肯定會

android 的app是運行在一個虛擬機內,中間就多了一層的調用。

另外java沒有直接編譯成二進制,而是java byte code,需要再經過jit才能運行,這又是一比開銷。

這兩方面看 c必然快一些。

但是app開發如果也用c的話,那麼app的數量和質量看 肯定會差很多,畢竟c並不是一門容易使用的語言。如果一個系統飛快但是沒有app的話 你還會用麼


果醬實驗室


謝謝邀請!

Android會卡頓不光是Java的鍋,當然Java構建在虛擬機上的這個特點,確實會對Android系統的流暢度造成比較大的影響,不過這並不是唯一的原因。

Android為什麼不用C語言開發應用?

Android本身是基於Linux內核發展起來的,在技術棧方面Android內核部分是C語言編寫的,中間的框架是C++,連接應用層、應用開發是通過Java來開發的。

為什麼不用C語言來開發Android應用呢?

C語言本身不是面向對象的編程語言,用來做業務開發並不是特別適合,要做圖形界面更是非常不擅長,跟Java和C++這些編程語言比起來,在這方面有很大的差距。

C語言還有個非常大的劣勢是,學習門檻要比Java等編程語言還是要高很多,而且C語言程序員數量相對來說比較少,這對於Android初期的發展是不利的。Java程序員數量多,Java還是開源免費的編程語言,面向對象、跨平臺,這都是Java的優點,剛好這些優點跟Android的發展非常契合。因此不選擇C語言,也是有特定的原因的。

Android卡頓不光是Java的鍋

基於虛擬機是Java的優點,這讓Java擁有非常好的跨平臺優勢,也確實客觀上讓Android的“負擔”增加了,不過這並不是全部原因。

  • Android碎片化太嚴重了:硬件亂七八糟、ROM廠商都有自己的規則

Android的碎片化主要是兩方面造成的,一個是硬件、一個是軟件。

Android的硬件設備簡直是太豐富了,這一點跟Windows很類似。Android手機分為非常多的廠商,三星、小米、OPPO、VIVO、華為等等;Android手機的處理器也非常多樣,高通梟龍、聯發科、華為海思麒麟、三星獵戶座等等;屏幕形態也是亂七八糟,額頭、打孔、水滴,還有各種各樣的尺寸、分辨率,非常豐富;攝像頭模組也是多種多樣,單攝、雙攝、三攝、四攝。

Android由於開源、以及某些大家眾所周知的原因,導致了在國內每個廠商都有自己的ROM,每個廠商都有一套自己的規則,要加入很多自己的東西,這裡面大多數都是負優化。

  • WebAPP的廣泛使用

純原生開發的好處是性能更出色,可是很難應對互聯網的需求變化。互聯網行業需求變動太多了,經常要進行版本迭代,WebAPP能夠很好的應對需求變動,還能夠實現跨平臺開發,能夠大大的減少研發成本。WebAPP跟原生應用比起來性能和體驗都會差很多,這一點同樣會讓用戶體驗變差。

  • 國內應用開發商都非常不規矩:權限濫用、功能冗雜

Google對於Android的權限管理本來就比較開放,在國外的原生Android還好,Google可以通過Google Play進行統一管理,管理也非常嚴格,因此原生Android其實還是比較流暢的,卡頓的問題沒有那麼嚴重。

不過這一點到了廠商這兒就完全不一樣了,每個廠商都有自己的ROM,每家廠商的管理嚴格程度也不一樣,這就讓應用廠商有了很多捷徑。國內的應用廠商權限濫用非常嚴重,各種不講道理的後臺啟動、以及各種各樣的監控,後臺殺都殺不掉,不斷地自動重啟,耗費硬件資源。

國內的應用恨不得一個App要把你吃喝拉撒睡所有的事情都給你解決了,訂機票火車票、點外賣、買電影票、看新聞、聊天、充話費水電費、購物......總之所有的功能都要開發,這會讓App在功能上非常臃腫,自然會佔用更多的硬件資源。

因此,Android卡頓的問題不光是Java的鍋,Android硬件、軟件廠商導致的碎片化,應用開發商又不太守規矩,功能冗雜不說、還濫用權限,這樣的Android換什麼編程語言都難。


本文為作者EmacserVimer悟空問答原創文章,未經允許轉載、抄襲必究!

EmacserVimer


所以說java遲早會被淘汰的,性能太差。谷歌就是太蠢,竟然用java虛擬機。


先下水為強


如果安卓的APP都改成C或者C++,其它規則都不變,運行速度提高一倍應該沒什麼問題,內存消耗降低50%也沒問題,但是開發效率估計得降低90%。而且APP的運行速度還是會比不上蘋果。iOS系統的優勢在於封閉,對程序的權限控制很嚴格,底層根本不準應用程序直接訪問;安卓是開放系統,程序員可以隨心所欲,想駐留後臺就駐留,想喚醒系統就喚醒。對比一下你的電腦裸奔時和裝上殺毒軟件之後的區別就能理解了。


藍色的星49


還在提java性能慢這種破梗的不是老頑固就是懂皮毛的新菜鳥。

首先jacva虛擬機的執行速率已經在最近幾個版本優化後幾乎和機器碼一樣了

其次安卓是要儘快建立生態鏈,一個再好的系統沒有人用也是辣雞,阿里前幾年搞的阿里操作系統君不見也是用的java語法(還只是java語法 還不是完全採用的java虛擬機)最後還被人吿來打官司,可見整個it行業內應用軟件開發中java的地位


魚於非


安卓基於Linux內核開發,而linux是純c語言寫的,有聽說過用java寫驅動的嗎?再對比iOS,有誰認為安卓快過ios的?安卓機動不動就8核8G內存,iPhone才多少?java虛擬機就是內存吃貨,慢,一堆人說什麼代碼質量的,真是搞笑


saiksy


運行起來我不知道。但我知道就算你代碼再好,CPU再快,啟動也至少3s


無情最難書


基於彙編執行效率更高咋不去用啊,腦子進水的真不少,非得從執行效率上爭個好低,程序員眼界就那麼窄麼,如果沒有其他高級語言,憑藉c的開發效率和難度,現在軟件行業得倒退十年


夶白兎


一群外行,安卓需要效率的都編譯成二進制代碼了,顯卡渲染也和是c還是Java沒關,剩下的是c是Java基本沒影響,Java能跑五十幀的,換成c通常也去不到五十一幀。


高科技讓人煩惱


會的。

但是計算量小的應用沒有必要,這就像是10ms和100ms的差距,人也基本感覺不出來,而且JAVA層封裝的方法多,寫起來也比C更快。

計算量大的很多都會用C來實現計算部分的代碼,然後通過jni調用native代碼。

JAVA和C效率差距大概可以用10倍左右來算。

而且現在的應用加載一個原聲頁面雖然說表層是JAVA寫的,但調用的大多數都是底層的native代碼。

當然你也可以用純C來寫,但是這就沒有多少現成的接口可用了,即使是一個按鈕也要自己來通過egl繪製,大大增加了開發時間。估計除了大公司以外,在流行快速開發的大環境下,沒有多少公司玩得起。


分享到:


相關文章: