回覆列表
  • 1 # 歷史是一道光

    好多Java程式設計師都說由於JIT技術的引入,Java的效能已經和C++一樣了,而且Java的開發效率極高,可以省下60%的時間。請問事實真的是這樣嗎?我平常也都在寫這兩個語言,但是因為開發的軟體的複雜度不大,並沒有感覺到效能和開發效率有太大的差異,如果真的如那些Java程式設計師所說的那樣,為什麼主流的遊戲引擎都不用Java實現呢?而且教育版的Minecraft為什麼要用C++重寫呢?

    遊戲/CAD本來就是C++的核心陣地,特別難被其它語言取代。(科學計算/網路服務方面的強勢則更多是慣性使然)在這個場景下Java和C++有明顯的效能差距,不代表別的場景下兩者效能不能接近。

    這類場景的特點是什麼呢?操作一大堆各種型別小物件的複雜程式碼。

    大量小物件

    多種型別

    程式碼量大

    缺一不可。

    這類任務說到底就是模擬。Bjarne Stroustrup創造C++就是為了做模擬,並非偶然。

    Memory wall是越來越高的。Memory is the new disk. 對於這類任務,不是說你JIT生成了理論上最少cycle數的程式碼,效能就比肩C/C++了,還要看物件的記憶體佈局。記憶體佈局不能和C/C++一樣緊湊的話,可能從起跑線上就已經輸了。

  • 2 # 三袋大菠蘿

    用純java完全實現一個影象解碼程式試試?比如jpeg。

    記住,不要用java系統庫(系統庫是C封裝的),純java程式碼實現,看看速度差幾倍。

  • 3 # 自古人間見白頭

    感覺不會,c++是幹底層的,java高的應用層的,可以說java在某些方面超過了c++,你的提問著實片面了

  • 4 # 程式設計師小苗

    脫離使用場景單純從語言層面去比較沒有什麼實質的意義。

    比如計算密集型的應用場景下,那毋庸置疑c++的效率效能無可比擬的。

    c++主要適用於底層的演算法,Java主要擅長的應用層面高併發多工的系統伺服器端應用,看現在國內國外的大型後端服務都是使用Java開發,這得益於Java強大的社群生態使得企業級應用的開發變得簡單高效,但是大型的計算密集型應用,比如遊戲,證券核心系統、風控系統核心演算法還是用的c/c實現的多些。

    所以,沒有哪個語言一定強於哪個語言,要看具體的使用場景,不同語言的擅長是不一樣的。還有,一個系統也不是從頭到尾就一種語言,大型的系統都是好多種語言並存的,不同的模組使用最合適的語言開發。

  • 5 # Suro

    C++可以直接編譯成計算機可識別的機器語言,Java需要透過JVM轉換,也就是需要JVM中間層才能轉換成計算機可執行的程式碼,從這個角度上看,你覺得JAVA的效能可能超過C++嗎。

    另外,據說JAVA的JVM都是C語言開發的,而C++又是C語言的升級版,我記得之前我曾經研究過,JAVA大概比C++慢30%左右吧,這個你可以自己去做下測試就知道了。

  • 6 # 普天藍

    說JAVA效能超越C++那是吹牛逼騙不懂的人的。通俗點解釋二者的差距,開發遊戲用JAVA就足夠了,尤其是手機遊戲!但是開發證券交易系統等大型工程專案還得是C++上!凡是熟練掌握C++的人那都是真正的高手!從程式語言難易角度排序,最難的是C++,下來是JAVA,再下來是Python。剩下什麼C,PHP,BASIC等都上不了檯面不入法眼!

  • 7 # 太初聖體

    只能永遠逼近,永遠無法超越!

    因為Java是跑在虛擬機器上的!

    Scala編譯型Java? 達到有點可能!超越沒可能!

  • 8 # 程式碼Go說科技

    題主需要具體到某一點,這麼問會引發不必要的爭論的。

    JAVA的開發效率高,開源資源也多,管理類的應用建議使用。

    C++的處理效率高,實時控制類的首選。

  • 9 # 時間創作者

    java等高階語言在jit引入之後,其實執行效率基本上可以做到跟c做出來的native至少是一個數量級下

    這個不僅僅是java,python的pypy等語言,也都差不多,但是有一點值得注意,就是py等動態型別語言,本身會降低效能,但是如果是靜態型別,jit之後,差距應該是在毫釐之間

    這個說法一個典型的證據就是techempower的benchmark,這個bench在所有web servers啟動的時候,會先預熱15s,15s之後,絕大多數的jit都已經啟動了,所以你可以看到這個時候,jvm上各種優勢就發揮出來,排行前十基本上就都是jvm的天下了

  • 10 # 貓白白1

    Java優勢在於可以動態最佳化程式碼執行。C優勢在於可以內聯彙編。至於呼叫系統介面,兩者半斤八兩。其他語言想超越比較難。

  • 11 # superdoumi

    做過4年的RVM java虛擬機器的實現。實際上,java的動態編譯引擎的效率和效果,的確和大部分c++編譯器編譯出來的指令,在執行效率方面差不多。

    額外引入的效能損失在GC(垃圾收集)引擎上,不論是分代式垃圾收集器還是marksweep等,這些引擎從監視物件建立,到掃描並回收物件,都需要消耗超過20%的效能。這就是java實際執行看起來比c++慢的原因。

    但垃圾收集本身給java語言引入了記憶體管控的安全性,使得java語言程式碼,絕不會出現c++程式碼可能出現的緩衝區溢位,double free等很多致命的軟體錯誤。這也是效能換安全的一個語言設計的平衡吧。

  • 12 # 計算機網路啟蒙

    程式語言沒有快慢,有快慢之分的是各語言的編譯器及其執行時環境。語言裡的一些特性確實會影響最終生成程式碼的效能,因為那些特性會影響編譯器是否能實行某些特定的最佳化。這些在語言的設計和演進中也都有所體現,比如C和C++標準中為什麼有“未定義行為”,C99標準中增加的restrict關鍵字;比如C++11中定義了記憶體模型。這些都是真正關心效能和編譯器最佳化的人很好的材料。

  • 13 # 缺氧149706861

    java是C++編的,怎麼會速度超過C++呢?

    如此C++可以超過C

    C可以超過彙編

    彙編可以超過微指令

  • 14 # lehoon

    jit對一些程式碼的最佳化後,效率可以達到c/c++或者比c/c++好,但是僅限於部分程式碼, 比如一些基礎的數值計算經過jit最佳化後,效率可以和c/c++持平或者超過都有可能, 但是說java的各方面效能都達到或者超過c++,這種說法不準確。

    java本身就多了一層jvm,jvm本身也佔用資源,也有自己的操作邏輯,還有是不是會觸發的gc導致的stw時間。 整體上看,同樣的程式碼,在理想條件下應該是java要弱於c/c++的。但是同樣的程式碼,在java編譯後,可能效率會比c/c++高, 只不過由於jit對java程式碼最佳化更好一些,c/c++寫出來的程式碼需要有經驗的進行最佳化、同時需要編譯的時候指定最佳化級別。

    總的來說,java經過多年的最佳化, 效能在部分領域已經追趕上c/c++了, 滿足一些工業化軟體開發的基本需要了, 再加上java恐怖的開發效率(語言層面、依賴體系、開源優勢), 現在基本上是工業化軟體的首選開發語言了。

  • 15 # 藍鳥啃蘋果

    這是要瘋啊,目前有這種口氣的語言瞭解一下rust和go語言,說Java超過C++的沒搞明白,Java自己就是用C++為基礎開發出來的語言畢竟它和C++之間永遠間隔了一個JVM,而 rust和go已經可以自己編譯自己的編譯器了……

    另外說一句.net core 2.0以上那個最佳化是真瘋了,採用了一些原生編譯技術,但是效能和C++比起來還是差了一大截子

  • 16 # young999

    怎麼可能,一般的應用輕量使用可能差不多。做個jpeg解碼看看,要是Java能有c++加ipp包的50%效能我都可以給他磕頭。

  • 17 # IT拾荒老人

    拋棄業務場景談語言沒有任何意義,任何語言都需要結合場景,單純追求速度直接操作指令集最快,可是沒有生產力有啥用。很多人在搞鄙視鏈的時候,殊不知自己看不起的語言裡很多人已經財富自由,自己卻還在瞧不起人家

  • 18 # 舞動的程式碼

    我來說句,java開發效率不如php,執行效率不如c/c++, 便捷程度不如python, 機器配置高的在座沒有比的上的

  • 19 # Sarins

    這都取決於編譯器,Java只不過是一種程式語言,用於表達程式設計人員的邏輯,最終這種邏輯用於何處何時基於什麼上下文都是由編譯器決定的。

  • 20 # 飯特稀406

    嚴格滴說,Java指令的效率不會比C++快,畢竟指令譯碼和垃圾回收都要消耗額外的時間,但是在很多時候確實讓人感覺它的速度不低,甚至超過同樣的C++程式碼,那是因為JVM的執行時最佳化,我們在程式設計的時候經常忽略程式碼結構的最佳化,C++沒有執行期的最佳化,速度只取決於編譯質量,原始碼有多爛,執行就有多爛。而JVM的JIT是執行時編譯,它可以在很大程度上在執行時動態地最佳化你的程式碼,避開原始碼中冗餘的地方,成倍地加速執行效率。這就導致相似的原始碼最終得到不同的執行程式碼,這就是為什麼Java能夠表現出不慢的“錯覺”。所以說程式設計師不要對自己的編碼能力太自信了,你編出來的程式碼不見得比JIT最終優化出來的更好,高手畢竟是少數,而你不在其中的機率更大。

  • 中秋節和大豐收的關聯?
  • 如何理解“天地不仁以萬物為芻狗”?