-
1 # killman
-
2 # 使用者869727120422
Java的跨平臺型是方舟目前沒有的。因為它只針對自家平臺。就和iOS一樣。只能說是個生態環境。替代c++是不可能的。再說了Java底層就是c++,還能喧賓奪主嗎?
-
3 # 名偵探小磊
不是。大部分情況下,java不能替代c++不是因為執行效率而是因為java不支援指標。這是語言特性的問題,換一個編譯器也解決不了。
-
4 # 工業網際網路智慧製造
不用方舟,java也能代替c/c++
9102年了,java早就在開發速度和效率上秒殺了一眾c/c++等底層語言,老專案是沒法改了,新專案你看現在有多少c/c++的,TIOBE排行榜上第一位的可是java
4月25日,北京。
“它就是能讓安卓上的應用,跑得跟蘋果iOS上一樣快。”面對臺下的記者,華為消費者BG軟體部Quattroporte王成錄這麼描述方舟編譯器的作用。 此時,距離這個吊起了安卓應用開發者們興趣的編譯器在釋出會上被公開,正好過去了兩週。 什麼是方舟編譯器? 在4月11日的華為P30中國發佈會上,華為消費者業務CEO餘承東正式釋出了華為方舟編譯器,並表示這個編譯器能改善安卓應用編譯效率,從原先的邊解釋邊執行轉變為全程機器碼高效執行程式。 編譯器,就是將“一種計算機語言(通常為高階語言)”翻譯為“另一種計算機語言(通常為低階語言)”的程式。高階計算機語言便於開發者們編寫、閱讀交流以及維護,如Pascal、C、C++、Java等,而低階機器語言是計算機能直接解讀、執行的機器程式碼(Machine code)。 華為的方舟編譯器,就是將安卓應用開發者們所使用的JAVA、C/C++們轉換成機器程式碼。據王成錄透露,華為從2009年就開始考慮做編譯器,“因為咱們海思做了晶片以後,需要有自己的編譯器才能真正發揮晶片的能力,從2013年開始,有華為自己的自研編譯器了,叫HCC。” 根據時間表顯示,在2012年,華為成立了編譯器與程式語言實驗室,在2014年,技術大牛Fred Chow加入華為負責編譯器的主架構,經過十年的摸索,華為終於推出了方舟編譯器。 根據華為官方公佈的資料顯示,與此前的安卓應用開發相比,方舟編譯器能夠提升24%的系統操作流暢度,提升44%的系統響應能力,還能提升60%的第三方應用(微博極速版)操作流暢度。 它是怎麼做到的? 一、 消除了跨語言呼叫開銷 王成錄向記者們詳細闡述了方舟編譯器能提升流暢度、響應能力的工作原理。 首先,方舟編譯器是多語言聯合最佳化編譯器,“消除了跨語言呼叫開銷,這是影響Android效能開銷比較大的核心原因之一。” 據王成錄介紹,目前Android應用市場裡95%的APP都是多種開發語言:“邏輯部分,都是Java程式碼,但是為了增強它的能力,可能所有的APP的開發者,都會用C寫個庫供Java來呼叫。” Java是一門面向物件程式語言,具有簡單性、面向物件、分散式等特點,雖然執行效率不及C++,但開發效率高、跨平臺性更強的優勢,讓JAVA成為了安卓開發的首選,而透過JNI呼叫本地C/C++庫也是目前開發者們都在做的。 但,Java和C語言之間使用介面呼叫,必然會形成額外的效能開銷;王成錄表示,華為方舟編譯器將不同語言程式碼在開發環境中編譯成一套可執行檔案,這樣執行效率更高。 二、消除了影響效能的虛擬機器機制並實時回收記憶體 王成錄認為華為方舟編譯器的第二大特點是消除了影響效能的虛擬機器機制。 在安卓系統發展過程中,虛擬機器不可被忽視:Android系統是以Linux為核心構建的,為了降低應用的開發難度,並將其適配到不同硬體配置的裝置上,Google在Linux核心之上構建了一個虛擬機器,Android應用使用java開發,執行在虛擬機器之上。 在安卓4.4之前,Dalvik就是安卓系統上使用的虛擬機器,基於暫存器。從Android 2.2開始,Dalvik開始使用JIT(Just In Time)技術來進行程式碼轉譯,將頻繁呼叫的程式碼轉換為二進位制碼,不用每次解釋,而在此前Dalvik虛擬機器將所有的Java語句逐句解釋執行,效率很低。。 但Dalvik越來越不能滿足需求,從Android 5.0開始,虛擬機器從Dalvik換成了ART。 ART(Android RunTime)虛擬機器,採用AOT(Ahead Of Time)技術,會在應用程式安裝時就預編譯位元組碼到機器語言,不再在執行時解釋,從而優化了應用執行的速度。 所以,到目前為止,安卓系統的任何機器只要裝上應用裝上就會分配好虛擬機器,佔用額外的系統資源,消費者從應用市場下載APP以後,真正解釋成機器指令和執行檔案是在手機上的虛擬機器裡做的,因此對系統資源要求高。 王成錄表示,ART的執行效率雖然提高了,但是對於那些Java動態特性的部分,仍然做不到直接編譯,還是要解釋執行。 這源於Java不是Python那樣的動態語言,但開發者經常會用到它一個非常突出的動態相關機制:反射機制。Java反射機制主要提供了以下功能:在執行時判斷任意一個物件所屬的類、在執行時構造任意一個類的物件、在執行時判斷任意一個類所具有的成員變數和方法、在執行時呼叫任意一個物件的方法、生成動態代理。 王成錄表示,Java動態特性使得開發者“不需要把所有的程式都寫好,只要能夠執行時實現呼叫就可以了。”但這部分往往只能在執行時進行處理。而方舟編譯器最大的突破就在於此:把動態的部分全部靜態編譯掉。 這確實很難。 王成錄認為,這就像一個優秀的翻譯官,一定要對漢語言文學理解的非常到位,然後再對英語理解非常到位;所以,核心是一定要對Java語言動態特性非常深入的瞭解和理解,“Java有非常多的庫和業務邏輯,這些業務邏輯它生成各種各樣的應用和程式碼和業務邏輯,這些業務邏輯就需要團隊不斷地去理解它,這個理解有點類似於做程式碼測試的遍歷一樣,我讓這個程式碼全跑到,才知道可不可以,它需要非常多的時間去積累,我對於庫的理解,當然需要技術,我理解這個庫本身的具體含義,有點像AI裡面,我要收集東西,訓練一個模型。如果這個東西沒有的話,我訓練出來的模型不好,我這個機器沒法執行,這個道理特別像。” 然後還需要對這些安卓現有的應用可能會用到哪些庫、這些庫之間需要怎麼用,需要大量的分析執行狀態,才能夠將這些動態特性完成提前的編譯。“實際上華為對於Android整個系統各種應用的執行,做了非常仔細去確認,相當於一個應用從底層起來,一直跑完以後,到底經過哪些過程,這些過程可能會帶來什麼問題?去哪些庫取東西,這些東西積累越多,放到動態庫裡面,把它編譯完了。有了這2個積累,才能做成這件事情。” 對於效果,有開發者向網易科技表示,“做成了靜態編譯,速度肯定會更快。” 方舟編譯器還能提供更高效的記憶體回收機制。 王成錄表示,Android的原生記憶體回收,在全域性回收時需要暫停應用,等待回收完成,這是產生隨機卡頓的重要原因,“而在方舟編譯器裡,會在編譯時為程式配備及時回收的記憶體處理機制,在程式執行過程當中實時處理。” 三、 可以靈活實現不同應用的效能最佳化 王成錄表示,方舟編譯器的第三個亮點是可以靈活實現不同應用的效能最佳化。 他表示,現有的安卓編譯大部分程式碼在虛擬機器環境執行,而虛擬機器的建立由於來自於同一套“模板”,難以作深度的最佳化:不同應用的最佳化訴求不一樣;相比之下,方舟編譯器不一樣,每個應用編譯最佳化方案自己來定,分別形成不同應用最佳化後的機器碼,“相當於說,我們給每一個有追求的應用開發者,都有了一個把自己的應用做的更好的機會,不再受限於Android虛擬機器的限制。” 王成錄稱,方舟編譯器最理想的目標就是“上層業務程式碼不需要改,大家只需要透過華為的方舟編譯器做重新編譯就足夠了。” 他希望,Android陣營所有合作伙伴大家一起努力,從各自場景、各自平臺不斷去打磨它
-
5 # 工控電子愛好者
C的地位現在還無可撼動,最基本的、底層的東西不會換成其他的,除非又有了新的技術而不需要底層了直接上層建築。
-
6 # Java初學者
在爭哪個語言最好?沒意思。到底還是根據業務場景來選最合適的語言
c++ 的優勢是執行效率高,缺點是掌握難度大, 編譯時間長, 開發的時候效率低,但執行效率高。java 是執行效率低,語言容易上手,編譯時間少,開發效率高。
方舟編譯器結合了兩門語言的特點,即開發的時候用java 打包,釋出的時候直接完全編譯好,既可以利用java的開發高效率也可以有c++級別的執行效率。
這樣的設計使得不同語言程式碼在開發者環境中能夠統一編譯成同一套可直接執行的機器碼,從而消除了混合語言互相呼叫的開銷。從這樣的設計就能看出,方舟編譯器是在集不同技術所長,不存在誰能替代誰的說法。
-
7 # 程式碼四驅
當然不能啦,c的地位,無論如何都是無法撼動的,特別是在更加專業的領域,需要效能的領域。
方舟編譯器能應用的範圍也比較小,只是在一個特別的領域而已。
Java的設計,本身就是為了一次開發,到處都能執行,因此他少不了虛擬機器,少不了虛擬機器,效能上自然會有些問題,無論怎麼最佳化編譯,最終還不是得拖泥帶水的,所以他怎麼能替代c呢?
當然了c的生態沒有java的豐富,所以確實c的應用領域現在也是越來越小,但不等於它就要消失,因為還有很多領域是適合c的。
-
8 # tom87542216
C是地基,java是上面的建築材料,系統基礎需要編譯器,將人類語言翻譯為機器二進位制的,一般由彙編完成,但彙編太複雜,所以要開發了c語言,用於常規設計,c與彙編介面相對高效。java是後來的高階工程語言,易學降低工程師入門門檻,但對於Android用java只是因為用的人多,最近python比較火,入門比java更簡單 實現更好,但java畢竟積累不少,暫時有市場
-
9 # 緊張的影帝
先回答問題 不是
首先我們需要看透問題的本質, java 本來就是用c寫的, 怎麼能替代他祖宗呢?
執行效率上講,c/c++ 的速度 遠遠快於 java .而且 在桌面領域 java 的市場份額 少的可憐, java 目前只有 在安卓,等只能裝置領域 佔有一一席之地.還有就是後端服務.
方舟 或許就是對 java 的二次封裝,(目前還沒有 開源不知道,我猜的 ), 國內 應該不可能,做一個 現在就超越 或者接近 java 的編譯器出來.
回覆列表
java的跨平臺型是方舟目前沒有的。因為它只針對自家平臺。就和ios一樣。只能說是個生態環境。替代C++是不可能的。再說了了java底層就是C++。還能喧賓奪主嗎?