首頁  >  文章  >  Java  >  java程式碼是怎麼運行的

java程式碼是怎麼運行的

(*-*)浩
(*-*)浩原創
2019-11-13 09:24:281839瀏覽

java程式碼是怎麼運行的

java虛擬機器具體是怎樣運行java字節碼的?

從虛擬機器的角度來看,執行java程式碼首先需要將它編譯而成的class檔案載入到java虛擬機器中。載入後的java類別會被存放在方法區中。實際運行時,虛擬機會執行方法區的程式碼。      (建議學習:java課程

java程式碼是怎麼運行的

#在運作過程中,每當呼叫進入一個java方法,java虛擬機會在目前執行緒的java方法堆疊中產生一個堆疊幀,用於存放局部變數以及字節碼的操作數。這個堆疊幀的大小是事先計算好的,而且java虛擬機器不要求堆疊幀在記憶體空間連續分佈。

java程式碼是怎麼運行的

在hotspot裡面,上述翻譯過程有兩種形式:第一種是解釋執行,即逐條將字節碼翻譯成機器碼並執行;第二種是即時編譯(JIT),即將一個方法包含的所有字節碼編譯成機器碼後再執行。

前者的優點在於無需等待編譯,而後者的優勢在於實際運行速度更快。 HotSpot預設採用混合模式,綜合了解釋執行和即時編譯兩者的優點。他會先解釋執行字節碼,而後將其中反覆執行的熱點程式碼以方法為單位進行即時編譯。

java虛擬機器的運作效率究竟怎麼樣?

即時編譯是建立在程式符合二八定律的假設上,也就是百分之二十的程式碼佔據了百分之八十的計算資源。

對於佔據大部分的不常用的程式碼,我們無需好分時間將其編譯成機器碼,而是採用解釋執行的方式運行;另一方面,對於僅佔據小部分的熱點程式碼,我們則可以將其編譯為機器碼,以達到理想的運行速度。

理論上講,即時編譯後的java程式的執行效率,是可能超過c 的。這是因為與靜態編譯相比,即時編譯擁有程式的運行時信息,並且能夠根據這個信息做出相應的最佳化。

舉個栗子:對於一個虛方法的調用,儘管有很多個目標方法,但在實際運行過程中他可能只調用其中一個。這個資訊可以被即時編譯器所利用,來規避虛方法呼叫的開銷。

以上是java程式碼是怎麼運行的的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn