在什么情況下Java比C++快?
回復(fù)者:Cameron Purdy,Oracle中間件高級(jí)工程師。
這是根據(jù)我同時(shí)使用C++和Java工作超過(guò)20年所學(xué)到的,其實(shí)使用Java比C++還要早幾年:
1、根據(jù)我的經(jīng)驗(yàn),當(dāng)你把優(yōu)化過(guò)的C++代碼轉(zhuǎn)換成Java代碼,代碼的速度會(huì)慢大約三倍。
2、根據(jù)我的經(jīng)驗(yàn),把Java代碼轉(zhuǎn)換成C++的代碼,速度同樣也會(huì)慢三倍。首先,這種比較根本沒有意義,除非你能意識(shí)到用Java的方式去寫Java代碼,而不是像C++開發(fā)者那樣去組織C++代碼。
3、對(duì)于并發(fā)的數(shù)據(jù)結(jié)構(gòu)使用Java往往更有效率。當(dāng)數(shù)據(jù)結(jié)構(gòu)不是并發(fā)使用時(shí),JVM會(huì)消除內(nèi)存屏障和同步,并傾向使用基于運(yùn)行時(shí)性能分析的并發(fā)管理。
4、Java的動(dòng)態(tài)內(nèi)存管理往往更有效率,在過(guò)度使用動(dòng)態(tài)內(nèi)存管理和多線程的系統(tǒng)中效果尤其明顯。
5、Java內(nèi)聯(lián)代碼往往表現(xiàn)更加優(yōu)秀,除非你基于分析器對(duì)C++代碼進(jìn)行了大量?jī)?yōu)化(或者確切地知道如何使用內(nèi)聯(lián)讓C++更加高效……你肯定會(huì)愛上這些頭文件!)。
6、使用Java的大型項(xiàng)目往往更容易優(yōu)化,因?yàn)镴VM為開發(fā)人員做了許多“全局”優(yōu)化(比如內(nèi)聯(lián)動(dòng)態(tài)加載的代碼能力)。
一家之言,至少我的感覺是這樣……