]]>Why Java Will Always Be Slower Than C++?http://www.shnenglu.com/Chipset/archive/2008/12/18/69739.htmlChipsetChipsetThu, 18 Dec 2008 09:20:00 GMThttp://www.shnenglu.com/Chipset/archive/2008/12/18/69739.htmlhttp://www.shnenglu.com/Chipset/comments/69739.htmlhttp://www.shnenglu.com/Chipset/archive/2008/12/18/69739.html#Feedback0http://www.shnenglu.com/Chipset/comments/commentRss/69739.htmlhttp://www.shnenglu.com/Chipset/services/trackbacks/69739.html
Why Java Will Always Be Slower than C++
by Dejan Jelovic
"Java is high performance. By high performance we mean
adequate. By adequate we mean slow." -
Mr. Bunny
鑰嶈繃Java紼嬪簭錛屾垨鑰呯敤Java鐮佽繃紼嬪簭鐨勪漢閮芥檽寰楋紝Java瑕佹瘮鐢–++鍐欐垚鐨勫師鐢熺▼搴忚鎱€傝繖鏄挶鐢↗ava鏃跺凡緇忔壙璁ょ殑浜嬪疄銆?br>銆銆涓嶈繃錛屽緢澶氫漢鎯寵璇存湇鎴戜滑璇磋繖鍙笉榪囨槸鏆傛椂鐨勶紝浠栦滑璇碕ava浠庤璁′笂鏉ヨ騫朵笉鎱紝鐩稿弽錛屽彧鏄幇鍦ㄧ殑JIT瀹炵幇鐩稿姣旇緝瀚╋紝鏈夊緢澶氳兘浼樺寲鐨勫湴鏂笿IT騫舵病鏈変紭鍖栧埌錛屾嫋浜?jiǎn)鍚庤呇潃傚叾瀹炰笉鐒?dòng)灱屼笉绠IT浠鐗涳紝Java姘歌繙瑕佹瘮C++鎱€?br>銆銆 銆銆鎴戞兂璇?.. 銆銆瀹f壃Java涓嶆參浜嶤++鐨勪漢寰寰鏄寰楋紝錛堣娉曪級(jí)涓ユ牸鐨勮璦錛屽彲浠ヨ緙栬瘧鏈夋洿澶х殑浼樺寲絀洪棿銆傚洜姝わ紝闄ら潪浣犳兂鍋氫漢鑲夌紪璇戝櫒浼樺寲鏁翠釜紼嬪簭錛屽惁鍒欓氬父閮芥槸緙栬瘧鍣ㄥ仛寰楁洿濂姐?br>銆銆榪欐槸鐪熺殑銆傚湪鏁板艱綆楅鍩燂紝Fortran浠嶇劧鑳滀簬C++錛岀殑紜洜涓哄畠鏇翠弗鏍箋備笉鐢ㄦ媴蹇?jī)鎸囬拡鐬庢悈鍜屽Q岀紪璇戝櫒鍙互鏇村畨蹇?jī)鍦颁紭鍖栥侰++鎯蟲墦璐ortran鐨勫敮涓鍔炴硶錛屽氨鏄ソ濂借璁′竴涓儚Blitz++閭f牱鐨勫簱銆?br> 銆銆嫻嬭瘯...
Java鍙互璺熷緱涓奀++鐨勫湴鏂癸紝灝辨槸鍩哄噯嫻嬭瘯銆傝綆楄搗絎琋涓枑娉㈢撼濂戞暟錛屾垨鑰呰繍琛岃搗Linpack錛孞ava娌$悊鐢變笉璺烠++璺戝緱涓鏍峰揩銆傚綋鎵鏈夌殑璁?
綆楅兘鏀懼湪涓涓被閲岋紝騫朵笖鍙嬌鐢ㄥ熀鏈殑鏁版嵁綾誨瀷錛屾瘮濡傝int鎴栬卍ouble鏃訛紝Java緙栬瘧鍣ㄧ殑紜兘璺熷緱涓奀++鐨勮剼姝ャ?br> 銆銆浜嬪疄... 銆銆褰撳紑濮嬪湪紼嬪簭涓嬌鐢ㄥ璞$殑鏃跺欙紝Java灝辨斁鏉句簡(jiǎn)娼滃湪鐨勪紭鍖栥傝繖涓鑺備細(xì)鍛婅瘔浣犱負(fù)浠涔堛?br> 銆銆1. 鎵鏈夌殑瀵硅薄閮芥槸浠庡爢閲屽垎閰嶇殑銆?br>銆銆Java浠庢爤閲屽垎閰嶇殑錛屽氨鍙湁鍩烘湰鏁版嵁綾誨瀷錛屽int錛屾垨鑰卍ouble錛岃繕鏈夊璞$殑寮曠敤銆傛墍鏈夌殑瀵硅薄閮芥槸浠庡爢閲屽垎閰嶇殑銆?br>銆銆褰撴湁澶ч噺璇箟涓婃槸涓鍥炰簨鐨勫璞℃椂錛岃繖涓嶆垚闂銆侰++鍚屾牱涔熸槸浠庡爢涓婂垎閰嶈繖浜涘璞°備絾鏄紝褰撴湁鍊艱涔変笉鍚岀殑灝忓璞℃椂錛岃繖灝辨槸涓涓富瑕佺殑鎬ц兘鏉鎵嬨?br>
浠涔堟槸灝忓璞★紵瀵規(guī)垜鏉ヨ錛屽氨鏄凱浠e櫒浠傚湪璁捐涓紝鎴戠敤浜?jiǎn)寰堝鑴P浠e櫒銆傚埆浜哄彲鑳戒細(xì)鐢ㄥ鏁般?D紼嬪簭鍛樺彲鑳戒細(xì)鐭㈤噺鎴栬呯偣綾匯傚鐞嗘椂闂村簭鍒楃殑浜哄彲鑳戒細(xì)鏈夋椂闂?
綾匯備嬌鐢ㄨ繖浜涚被鐨勪漢錛屾棤涓渚嬪鍦拌鍘屾妸涓嶈垂鏃墮棿鐨勬爤涓婂垎閰嶆崲鎴愯姳璐瑰浐瀹氭椂闂寸殑鍫嗕笂鍒嗛厤銆傚亣濡傛妸瀹冩斁鍦ㄤ竴涓驚鐜噷錛屽氨鍙樻垚浜?jiǎn)O(n)瀵?浜?jiǎn)銆傚鏋滃啀鍔犱竴灞傚驚
鐜紝娌¢敊錛屽張鍙樻垚O(n^2)瀵?浜?jiǎn)銆?br> 銆銆2. 澶ч噺鐨勮漿鎹€?br>銆銆寰楃泭浜庢ā鏉匡紝濂界殑C++紼嬪簭鍛樼敋鑷沖彲浠ュ啓浜庡畬鍏ㄦ病鏈夎漿鎹㈢殑鐗涚▼搴忋備笉騫革紝Java娌℃湁妯℃澘錛屾墍浠ava浠g爜鎬繪槸鍏呮弧浜?jiǎn)铦{鎹€?br>銆銆瀵逛簬鎬ц兘錛屽畠浠剰鍛崇潃浠涔堬紵鍛冿紝鍦↗ava閲屾墍鏈夌殑杞崲閮芥槸寰堣垂鏃剁殑鍔ㄦ佽漿鎹€傚璐規(guī)椂錛熸兂鎯充綘鍙兘浼?xì)鎬庝箞鏍峰疄鐜拌漿鎹㈢殑錛?br>銆銆鏈蹇殑鏂規(guī)硶灝辨槸錛岀粰姣忎竴涓被璧嬪間竴涓簭鍙鳳紝鐒跺悗鐢ㄤ竴涓煩闃墊潵鎻忚堪浠繪剰涓や釜綾繪槸鍚︾浉鍏崇殑銆傚鏋滄槸鐨勮瘽錛岄渶瑕佺粰鎸囬拡鍔犱笂澶氬皯鐨勪綅縐繪墠鑳借繘琛岃漿鎹€傝繖縐嶆柟娉曠殑浼爜鐪嬭搗鏉ュ簲璇ユ槸榪欐牱鐨勶細(xì) DestinationClass makeCast (Object o, Class destinationClass) { Class sourceClass = o.getClass (); // JIT compile-time int sourceClassId = sourceClass.getId (); // JIT compile-time
int destinationId = destinationClass.getId ();
int offset = ourTable [sourceClassId][destinationClassId];
if (offset != ILLEGAL_OFFSET_VALUE) { return <object o adjusted for offset>; } else { throw new IllegalCastException (); } } 濂戒竴鍫嗕唬鐮併傝繖鍙槸涓涓畝鍗曠殑鎯呮櫙鈥斺旂敤鐭╅樀鏉ヨ〃紺虹被鐨勫叧緋繪氮璐逛簡(jiǎn)涓閮ㄥ垎鍐呭瓨錛屾病鏈夊摢涓垚鐔熺殑緙栬瘧鍣ㄤ細(xì)榪欐牱瀛愬仛銆備粬浠細(xì)浣跨敤map鎴栬呴亶鍘嗙戶鎵挎爲(wèi)錛岃繖鏍蜂細(xì)鍙樺緱鏇存參銆?br> 銆銆3. 鏀鍗囩殑鍐呭瓨鍗犵敤銆?br>銆銆Java紼嬪簭鍌ㄥ瓨鏁版嵁鍗犵敤鐨勫唴瀛樺ぇ姒傛槸鐩稿綋鐨凜++紼嬪簭鐨勪袱鍊嶃傚師鍥犲涓嬶細(xì) 銆銆1. 鍚敤浜?jiǎn)鍨冨溇鏀堕泦鐨劷E嬪簭涓鑸兘姣斾笉浣跨敤鍨冨溇鏀墮泦鐨勭▼搴忓鑺?0%鐨勫唴瀛樸?br>銆銆2. 鏈潵C++閲屽湪鏍堜笂鍒嗛厤鐨勫璞★紝鍒頒簡(jiǎn)Java灝卞湪鍫嗕笂鍒嗛厤浜?jiǎn)銆?br>銆銆3. Java瀵硅薄姣旇緝澶э紝鍥犱負(fù)鎵鏈夌殑瀵硅薄閮芥湁涓涓櫄琛紝榪樿鍔犱笂瀵癸紙綰跨▼錛夊悓姝ョ殑鍘熺敓鏀寔銆?br>澶х殑鍐呭瓨鏄犲儚璁╃▼搴忔洿澶ф鐜囪鏀懼埌紓佺洏鐨勪氦鎹㈠尯鍘匯傛病鏈変粈涔堟瘮浜ゆ崲鏂囦歡鏇存參鐨勪簡(jiǎn)銆?br>銆銆4. 緙哄皯鏇寸粏鑷寸殑鎺у埗銆?br>Java鍘熸潵灝辨槸浣滀負(fù)涓縐嶇畝鍗曠殑璇█鏉ヨ璁$殑銆傚緢澶氬湪C++閲岃紼嬪簭鍛樻帶鍒剁粏鑺傜殑鐗規(guī)у湪Java閲岄兘琚竴鑴氳涪寮浜?jiǎn)銆?br>銆銆姣斿璇達(dá)紝鍦–++閲屽彲浠ユ敼榪涘紩鐢ㄧ殑浣嶇疆(?)銆傛垨鑰呬竴嬈$敵璇峰拰閲婃斁寰堝涓璞°傛垨鑰呯敤鎸囬拡鑰嶄竴浜涘皬鎶宸э紝鏇村揩鍦拌闂垚鍛樸?br>銆銆5. 娌℃湁楂樺眰嬈$殑浼樺寲銆?br>銆銆紼嬪簭鍛樺鐞嗛珮灞傛鐨勬蹇點(diǎn)傝岀紪璇戝櫒澶勭悊鍓╀笅鐨勪綆灞傛姒傚康銆傚浜庣▼搴忓憳鏉ヨ錛屼竴涓彨Matrix鐨勭被灝變唬琛ㄤ簡(jiǎn)姣斾竴涓彨Vector鐨勭被鏇撮珮灞傛鐨勬蹇點(diǎn)傝屽浜庣紪璇戝櫒鏉ヨ錛岃繖浜涘悕瀛楅兘鏄鍙瘋〃鐨勪竴涓叆鍙c備粬浠彧鍏沖績(jī)綾婚噷闈㈡湁鍝簺鍑芥暟錛屽嚱鏁伴噷闈㈡湁鍝簺璇彞銆?br>銆銆榪欐牱鎯充竴涓嬶紝姣斿璇磋瀹炵幇涓涓猠xp(double x, double y)鍑芥暟錛岃綆楀嚭x鐨剏嬈″箓銆傚浜庝竴涓紪璇戝櫒錛屽畠鑳藉彧鐪嬩竴涓嬭繖涓嚱鏁幫紝鐒跺悗鎸囧嚭錛宔xp(exp(x, 2), 0.5)鍙互浼樺寲鎴恱鑷繁鍚楋紵褰撶劧涓嶈銆?br>銆銆緙栬瘧鍣ㄨ兘鍋氱殑浼樺寲鍙槸璇彞灞傞潰鐨勶紝鑰寉鏄湪緙栬瘧鍣ㄩ噷闈㈢殑銆傚嵆浣跨▼搴忓憳鐭ラ亾涓や釜鍑芥暟鏄縐扮殑錛屽彲浠ユ妸瀹冧滑閮芥秷鍘伙紝鎴栬呭嚱鏁扮殑璋冪敤欏哄簭鍙槸鐩稿弽鐨勶紝闄ら潪緙栬瘧鍣ㄨ兘鍙瀯涓涓嬭鍙ワ紝鐒跺悗鎸囧嚭鏉ワ紝涓嶇劧浼樺寲鏄笉鍙兘瀹屾垚鐨勩?br>銆銆鎵浠ワ紝濡傛灉鎯寵瀹屾垚涓涓珮姘村鉤鐨勪紭鍖栵紝蹇呴』瀛樺湪鏌愮鏂規(guī)硶錛屽彲浠ヨ紼嬪簭鍛樻潵鍛婅瘔緙栬瘧鍣ㄤ紭鍖栫殑瑙勫垯銆?br>
娌℃湁鍝釜嫻佽鐨勭▼搴忚璦/緋葷粺鍙互鍋氬埌榪欑偣錛岃嚦灝戝凡鐭ョ殑鏂規(guī)硶錛屾瘮濡傚井杞壙璇虹殑鏅鴻兘璇█錛岄兘涓嶈兘銆傚嵆渚垮姝わ紝鍦–++閲屽彲浠ョ敤妯℃澘鍏冪紪紼嬫潵瀹炵幇瀵歸珮灞傛瀵?
璞$殑浼樺寲銆備復(fù)鏃舵秷闄わ紝閮ㄥ垎姹傚鹼紝瀵圭О鍑芥暟璋冪敤鐨勬秷鍘伙紝鍜屽叾瀹冨彲浠ョ敤妯℃澘瀹炵幇鐨勪紭鍖栥傚綋鐒?dòng)灱屼笉鏄墍鏈夌殑楂樺眰嬈′紭鍖栭兘鍙互榪欐牱鍋氥傚茍涓斿疄鐜拌繖浜涗笢瑗跨浉褰撻夯鐑?chǔ)銆?
浣嗘槸澶у鏁伴兘鍙互瀹屾垚錛屾湁浜哄凡緇忕敤榪欎簺鎶鏈疄鐜頒簡(jiǎn)濂戒簺鏃墮鐨勫簱銆?br> 銆銆涓嶅垢鐨勬槸錛孞ava娌℃湁浠諱綍鍏冪紪紼嬬殑鐗硅川錛屽洜姝ゅ湪Java涓笉浼?xì)鏈墭q欑楂樺眰嬈$殑浼樺寲銆?br>銆銆鎵浠?..