做過4年的RVMjava虛擬機的實現。實際上,java的動態編譯引擎的效率和效果,的確和大部分c++編譯器編譯出來的指令,在執行效率方面差不多。
額外引入的性能損失在GC(垃圾收集)引擎上,不論是分代式垃圾收集器還是marksweep等,這些引擎從監視對象創建,到掃描并回收對象,都需要消耗超過20%的性能。這就是java實際執行看起來比c++慢的原因。
但垃圾收集本身給java語言引入了內存管控的安全性,使得java語言代碼,絕不會出現c++代碼可能出現的緩沖區溢出,doublefree等很多致命的軟件錯誤。這也是性能換安全的一個語言設計的平衡吧。