JVM核心知識點(一):Java代碼是怎麼運行的

首先一個問題入題:是否知道java和c++在運行方式上的區別?
java需要依賴JRE的運行環境,而c++代碼則無需額外的運行時。

那麼問題又來了,既然c++的運行方式已經很成熟了,那麼爲什麼java要在虛擬機中運行呢?

  • 爲了實現一次編寫,到處運行的目標。
  • jvm作爲一個很好的託管環境,能夠代替我們處理一些代碼中冗長而且容易出錯的部分,比如垃圾回收。

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

從虛擬機的視角來看,執行java代碼首先需要將它編譯而成的class文件加載到java虛擬機中。加載後的java類會被存放在方法區中。實際運行時,虛擬機會執行方法區的代碼。
20200605005538104.png?,size_16,color_FFFFFF,t_70#pic_center

在運行過程中,每當調用進入一個java方法,java虛擬機會在當前線程的java方法棧中生成一個棧幀,用以存放局部變量以及字節碼的操作數。這個棧幀的大小是提前計算好的,而且java虛擬機不要求棧幀在內存空間裏連續分佈。

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

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

Java虛擬機的運行效率究竟怎麼樣?

即時

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章