現(xiàn)在java的執(zhí)行速度和c++相比誰快?你怎么看?
網友解答: 理論上一樣快,有時候cpp快,有時候java快。我估計有人肯定聽了就不樂意了,什么?java一定比cpp快才對,因為java是用虛擬機運行,虛擬機是c/cpp寫的,所以可以得
理論上一樣快,有時候cpp快,有時候java快。我估計有人肯定聽了就不樂意了,什么?java一定比cpp快才對,因為java是用虛擬機運行,虛擬機是c/cpp寫的,所以可以得出java一定比cpp慢!然而不是,因為java不是腳本語言。再次重申,java不是腳本語言!而上面提到的思維明顯是把java當成腳本語言對待了。這里就有一個很簡單的類比,匯編寫出的程序會比c語言寫出的程序更快么?不會,因為最終都是機器碼運行,沒區(qū)別,只是編譯過程不一樣罷了。java也一樣,最終不是那個jvm用java的語法控制c語言程序再用c語言程序輸出結果。java的玩法是先把java文件編譯成class文件,類似于一套特殊的機器指令,再經一套自己的硬件規(guī)則去操作真硬件,運行出效果。這才是虛擬機的含義,不然人家為什么不叫java解釋器?不然你以為編譯一遍是為了保密?另外,java能運行在硬件實現(xiàn)上,注意,是真的是直接運行在硬件上而不是什么用硬件集成一套其他語言編寫的運行環(huán)境再運行。畢竟,能有虛擬機,那就也能有實體機,直接用字節(jié)碼文件操作硬件。以前有過這種芯片,可惜推出之后沒什么市場,最終也就消失在歷史中了。
針對下方回復不相信java可以比cpp快的,這里做一個隨手就能來一個的例子。用cpp和java創(chuàng)建同樣功能的對象,連續(xù)創(chuàng)建一百萬個。測試環(huán)境MacBook pro2016款,jdk1.8.0-131,g++為4.2.1系統(tǒng)自帶(據說蘋果還優(yōu)化過),那么結果如何呢?見下方回復,有圖有真相。
網友解答:先劃一下重點:本問題是純粹比較運行速度!
看了一下這些回答,有些人可能因為自己是做java的,見不得自己做的東西差,死都不承認java速度慢。為什么java比cpp慢?大家都說得差不多了我不想再啰嗦。我只想從其他方面反過來證明。
首先,java程序員是中國所有程序員里最多的!說句不好聽的話,如果java的運行效率等于或者高于cpp,那么早就不存在cpp這門語言了,因為沒有理由用它!cpp的缺點大家都知道,編寫效率低(注意是編寫效率,不是運行效率!這兩者成反比?。粡碗s難理解;掌握這門語言需要先掌握操作系統(tǒng);等等。
其次,現(xiàn)在那些追求高性能(也就是高運行效率)的服務器上面跑的程序是用什么語言寫的?是c和cpp,沒有java寫的高性能服務器!java或者c#或者python或者php寫的服務器那是玩玩的,你家oa或者erp或者其他mis可以用這些語言寫,但此類系統(tǒng)軟件追求的正是編寫效率高!追求性能的服務器指的是科學計算類、游戲服務端類等等。
第三,某樓層回答說java編寫出來的程序最終跟匯編寫的程序一樣,都是生成了機器碼運行。我想問問層主,你懂匯編嗎?會使用匯編寫代碼嗎?最終生成的機器碼是一樣的嗎?!你確定java生成的機器碼不包含有羅里吧嗦一大堆沒用的東西,而只有極少的部分是用于做正確的事情?!
我舉個例子,同樣是上山,比如我用匯編寫實現(xiàn)是一條天梯從山底直通山頂,而用java實現(xiàn)是山路十八彎。機器碼在同一臺電腦運行速度一樣所以這里人走路的速度一樣(注意,任何語言包括解釋型語言,其最終都是依靠機器碼才能運行。機器碼的運行速度一樣是說明硬件速度固定,而不是java運行速度跟匯編一樣?。?,你說是我走天梯直通上方先到山頂,還是走山路十八彎盤上去快?答案顯而易見吧?!我建議該樓主好好看看我的回答,多學習多理解,避免扯淡誤導跟您一樣無知的萌新!