看板 Soft_Job 關於我們 聯絡資訊
這個問題10年前問還有道理, 沒想到2011年了還有人問.. Java效能的最佳化是一門學問, 事實上, 越是新, 越是結構複雜的語言, 效能的最佳化就 越是學問, 因為你可能錯過越多的細節. Java效能的瓶頸多在I/O, 資料需要頻繁地進出VM, marshalling. 為了I/O效能, 你可以 使用JNI, JNI本來就是Java考量所在; 相反的,若為了彈性或簡潔, 你也可以在Java裡執行 Java Script. 這些東西都提供你做選擇. 但如果你在不需要I/O的地方也使用JNI, 效能會不會比較好? 不會, 因為bytecode執行前 己由JIT-compiler轉成native code, 如果是簡單的運算, compile出來的指令其實差不多 , 效能當然也跟C 做出的結果差不多, 這道理就如同簡單的運算, C 與 ASM 做出的結果也 會差不多. 因此堅持用JNI反而效能會比較差, 而且失去原本 Write Once, Run Anywhere 的特色, 每種平台都需要再寫專屬的 libary. 最後提一下, 有些人至今都無法接受, Java執行的速度可能比C做出來的快, 但這種情況 是真實存在的. 前面有人提到, 如果Java要更快, 只能在演算法的地方贏過. 但事實上VM裡己內建好了各 式各樣的演算法, 要看見他們的優勢, 只需選擇在適當的場合應用即可. 2009, 這裡有人對C, Java, C#去測試一些 "小型" 程式的效能, 參考看看 http://reverseblade.blogspot.com/2009/02/c-versus-c-versus-java-performance.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.9.124
remmurds:推Mono 真是太強大了 05/22 12:34
luciferii:那個比較的重點應該是在於一個隱藏前提"給定相同的撰寫 05/22 13:17
luciferii:時間",得證 Java 有時可以比較快寫出跑快點的程式 05/22 13:17
luciferii:(但其實還有很多變因都要考慮,要去看到底兩邊的code怎 05/22 13:18
luciferii:麼寫的...) 05/22 13:18
francej:這種benchmark很多. 有的說Java快,有的說C快. 莫衷一是. 05/22 13:31
francej:但現實是傳統的Application應用(比如說辦公室軟體,IDE, 05/22 13:33
francej:compiler,photoshop,maya,finalcut,媒體撥放器...)還是用 05/22 13:34
francej:C/C++寫的居多. 少數純用JAVA寫的(如eclipse)好像也沒有真 05/22 13:35
francej:的讓使用者有體驗到說Java可以比C快..甚至是個大反例:p 05/22 13:35
francej:至於web應用. Java的處境也蠻尷尬的,不曉得是不是因為Sun 05/22 13:36
francej:不會經營. 感覺上web的方面,Java也沒有穩坐霸主的地位(以 05/22 13:37
francej:他的輩分資歷來說,按理說應該要是霸主). 像php, flash, 05/22 13:38
francej:c#, silverlight, scala, python. 一堆後起之秀 05/22 13:39
francej:手機應用也是很尷尬. J2ME基本上已經被Dalvik槍斃了吧 05/22 13:40
francej:..嚴格講起來Dalvik != JVM (Java). 05/22 13:41
aecho:是我看錯嗎?C++(Gnu)每一項都比Java來的快呀… 05/22 13:52
aecho:是分數越低越好嗎? 05/22 13:53
sayya2311:並不是每一項... 05/22 13:59
TonyQ:Eclipse 算蠻快了。 05/22 14:47
TonyQ:那就要看你定義什麼樣算霸主了,在我的認知理他佔了絕大多數 05/22 15:20
TonyQ:美國 enterprise 的市場。 05/22 15:20
TonyQ:flash / silverlight 跟其他項目比,先作功課好嗎 orz 05/22 15:21
TonyQ:scala 也很詭異...那是base on java 的東西啊...-_- 05/22 15:26