怎么运行java虚拟机_Java代码如何运行在Java虚拟机中
我們都知道要運行Java代碼就必須要有JRE,也就是Java運行時環境,JRE中包含了Java程序的必需組件,包括Java虛擬機以及Java核心類庫,然而運行C++代碼則不需要額外的運行時環境,只需要把代碼編譯成CPU能識別的指令即可,也就是機器碼.那為什么Java不直接像C++那樣而需要在虛擬機中運行呢?他在虛擬機中又是如何運行的?接著往下看.
Java為什么要在虛擬機中運行
剛才我們談到C++是直接把代碼編譯成機器碼的,但因為各個平臺的架構不一樣,CPU能處理的指令集也不一樣,所以如果要在另一個平臺上運行C++代碼,就必須用該平臺對應的C++代碼編譯器重新編譯一遍才可以.Java一開始就意識到需要跨平臺運行,所以Java設計了虛擬機,先將Java代碼編譯成字節碼(class文件),這是虛擬機能夠識別的指令,再由虛擬機內部將字節碼翻譯成機器碼,所以我們只需要有Java字節碼,就可以在不同平臺的虛擬機中運行,這也就是我們一直說的"一次編譯,到處運行".
Java虛擬機如何運行Java字節碼
我們JDK所用的虛擬機名為HotSpot虛擬機,他會將所有class文件加載進來,加載后的Java類會被放置在方法區,后面運行時會執行其中的代碼.Java虛擬機會在內存中劃分出幾塊,包括程序計數器,本地方法棧,Java虛擬機棧,堆以及方法區.
不過光是Java字節碼還是無法運行,Java虛擬機還需要將字節碼翻譯成機器碼,HotSpot有2種形式:第一種是解釋執行,即將字節碼逐條翻譯成機器碼并運行;第二種是即時編譯(JIT),他會將一個方法內的所有字節碼編譯成機器碼再執行.
前者的優勢無需等待編譯,但逐條解釋的代價就是運行速度會比后者慢,HotSpot默認采用混合模式,它會先解釋執行字節碼,然后對于反復執行的熱點代碼會去進行即時編譯.
即時編譯是監理在復合二八定律的基礎上,即百分之20的代碼占據百分之80的計算資源.對于不常用的代碼我們無需消耗時間在編譯成機器碼上,采用解釋執行就可以,而對于熱點代碼我們可以將其編譯成機器碼以提升運行速度.
HotSpot內置了幾個即時編譯器:Client Complier和Server Complier,簡稱為C1、C2編譯器,以便在編譯時間和生成代碼的執行效率之間做取舍,C1編譯時間更快,C2編譯質量更高.
總結
以上是生活随笔為你收集整理的怎么运行java虚拟机_Java代码如何运行在Java虚拟机中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android socket 闪退,an
- 下一篇: linux怎么改程序图标,如何在Ubun