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