從技術角度講,為什么c語言比java開發的應用要快?


以下是在論壇整理出來的答案

1.從編譯過來來看,JAVA是將.java文件編譯成.class文件,運行的時候再由java虛擬機將.class文件進一步編譯成對應的機器碼進行指令調用。而c語言會預編譯成預編譯文件,再編譯成匯編語言,二進制文件。直接和機器打交道。運行時中間省略了java的很多步驟。

 

2.C程序大部分時間會比Java快,但是獲得的效率有限。Java較慢主要是JIT編譯器需要時間編譯Java字節碼,以及gc可能影響效率,不過現在的Java比起以前以及大有改觀了。

 

3.由於JIT技術的進步,純計算上Java和C差距很小,但是Java和C的代碼不可能完全等效,因為兩者內存管理的機制不同,C可以完全控制內存管理,而Java主要靠JVM的GC功能,這導致Java的運行效率比較穩定,而C的運行效率和代碼質量密切相關。高質量的C會比高質量的Java快,但低質量的C很可能回比低質量的Java更慢。
其實單純比速度並不是特別公平,因為Java天生有多線程(JIT和GC),而且內存使用量一般Java明顯要多。

 

4.C語言是編譯型的語言,而JAVA語言則是解釋型的語言,因此JAVA語言要被翻譯二進制的語言代碼后,計算機方能辨識並執行。一般來說呢,c語言是比Java要快,不過因為c語言運行的過程是進程型的,而Java語言是線程型的,因此如果客戶的訪問量非常大,那么反而java顯得更合適。

【引申】

C語言是編譯型的語言,Java語言則是半編譯半解釋型的語言。兩者層次不一樣,決定了運行速度不一樣。那既然C語言運行速度更快還要用Java呢?因為Java的面向對象封裝特性有利於提高軟件的開發速度和編程感受。
舉個栗子:
人需要吸收能量才能正常生活,直接喝葡萄糖、氨基酸更容易吸收、節省時間呀,但為什么人們還是喜歡做出各種菜餚慢慢品嘗呢?因為雖然葡萄糖、氨基酸吸收快、轉換效率高,但是不好吃呀,不能滿足人們的審美需求,所以才需要更高級的食物,逐步消化,最后同樣達到為人體提供能量的目的。【此處我並不認為他舉的例子很妥帖,但是想要表達的意思,還是能勉強理解】
總結:
如果注重運行效率,覺得葡萄糖、氨基酸不難吃的話,用C語言寫大程序完全沒問題,C語言同樣可以實現面向對象。如果注重開發速度,不想加班,想吃更好吃的菜餚,就應該選擇例如Java這類強封裝性的語言。

 

5.C快是毋庸置疑,不過我認為運行時編譯這點性能損失可以忽略的,編譯只有一次,之后的調用就是直接執行CPU指令,而java的編譯優化很強,有些情況編譯出的CPU指令比C還少,不過java的內存占用是真大。

6.從最根本上說,就是同樣的代碼,經過編譯后java程序要比C程序的二進制代碼多,所以cpu必須花更多的時間去運行這些代碼,至於為什么多,就是java的編譯器要做很多其他的操作,這些操作為程序員提供了方便,但也增加了代碼的數量。

 

7.C和Java的運行效率現在對比起來應該沒有太大差別了吧
另外,Java應用領域和C的大不相同,應用程序運行的瓶頸一般不在自己本身了。
比如】一個功能模塊,C 程序運行要1毫秒,Java運行要10毫秒,但這個模塊需要與一台遠程主機進行通信,或者要進行大量的數據庫訪問,幾個來回要100毫秒。在這種情況下,怎么提高通信效率,減少通信次數,或者進行數據庫優化才是應該主要關注的。這也是Java應用程序主要關注的問題。
還有,單純的考慮程序運行快慢問題肯定是不夠的。比如兩個功能相同的系統,A系統響應一次用戶的請求要10毫秒,B系統響應一次客戶請求要100毫秒,而現實中,10毫秒和100毫秒對人來說基本上分別不出來;另外,如果A系統初始上線時非常快,但半年到一年之后,響應速度明顯下降,而B系統初始上線響應不如A快,但兩三年之后還是保持相同的響應效率;或者,10來人同時使用時,A平均10毫秒,B平均100毫秒,但同時100人使用時呢?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM