天天看點

java執行速度相比較慢的原因

本文主要說明java和C++兩種語言的執行速度差異較大的原因(借鑒自維基百科)。

java是解釋性語言,java程式在運作時,不像C++那樣直接被編譯成機器碼進行執行,而是類加載器從類路經中加載相關的類,然後java虛拟機讀取該類檔案的位元組碼,執行相應操作。

C++編譯的時候直接将程式編譯成本地機器碼.一般來說java程式執行速度要比C++慢10-30倍(java虛拟機可以将頻繁使用的位元組碼直接轉化成為機器碼,即采用即時編譯器,在熱點代碼的執行過程中與C++相差無異(進而提高執行速度);上面提到的資料很久遠了,java在最近幾年更新較快,資料有待證明),即使Java采用just-in-time compiling (讀取類檔案位元組後,編譯成本地機器碼)技術,速度也要比C++慢好多(這是為什麼呢?可能與後面的幾種原因有關)

java程式有要從網絡上加載類位元組,然後執行,這也是導緻java運作速度慢的原因

在程式運作過程中,java虛拟機要檢測數組是否越界,在C++中則不檢測.

java中所有的對象都建立在堆(Heap)中,沒有對象被建立在棧(stack)中,而C++有的對象和變量是建立在stack中的;

java在運作過程中檢測對象的引用是否為空,如果引用指向都空指針,且執行某個方法時會抛出空指針異常

java運作時對類型檢測,如果類型不正确會抛出ClassCastException異常.

java的垃圾回收機制較C++由程式員管理記憶體效率更低.

java中的原始資料類型在每個作業系統平台長度都是相同,而C++這些資料類型長度是随作業系統的不同而不同,是以java在不同作業系統上執行時有個轉化過程.

在java中String是UNICODE編碼,當java要操作一個 ASCII string時,比C++效率上相對要低一些.

java中采用的是動态連結