国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java代碼如何運行在Java虛擬機中

whjin / 2218人閱讀

摘要:我們都知道要運行代碼就必須要有,也就是運行時環(huán)境,中包含了程序的必需組件,包括虛擬機以及核心類庫,然而運行代碼則不需要額外的運行時環(huán)境,只需要把代碼編譯成能識別的指令即可,也就是機器碼那為什么不直接像那樣而需要在虛擬機中運行呢他在虛擬機中又

我們都知道要運行Java代碼就必須要有JRE,也就是Java運行時環(huán)境,JRE中包含了Java程序的必需組件,包括Java虛擬機以及Java核心類庫,然而運行C++代碼則不需要額外的運行時環(huán)境,只需要把代碼編譯成CPU能識別的指令即可,也就是機器碼.那為什么Java不直接像C++那樣而需要在虛擬機中運行呢?他在虛擬機中又是如何運行的?接著往下看.

Java為什么要在虛擬機中運行

剛才我們談到C++是直接把代碼編譯成機器碼的,但因為各個平臺的架構不一樣,CPU能處理的指令集也不一樣,所以如果要在另一個平臺上運行C++代碼,就必須用該平臺對應的C++代碼編譯器重新編譯一遍才可以.Java一開始就意識到需要跨平臺運行,所以Java設計了虛擬機,先將Java代碼編譯成字節(jié)碼(class文件),這是虛擬機能夠識別的指令,再由虛擬機內部將字節(jié)碼翻譯成機器碼,所以我們只需要有Java字節(jié)碼,就可以在不同平臺的虛擬機中運行,這也就是我們一直說的"一次編譯,到處運行".

Java虛擬機如何運行Java字節(jié)碼

我們JDK所用的虛擬機名為HotSpot虛擬機,他會將所有class文件加載進來,加載后的Java類會被放置在方法區(qū),后面運行時會執(zhí)行其中的代碼.Java虛擬機會在內存中劃分出幾塊,包括程序計數器,本地方法棧,Java虛擬機棧,堆以及方法區(qū).

不過光是Java字節(jié)碼還是無法運行,Java虛擬機還需要將字節(jié)碼翻譯成機器碼,HotSpot有2種形式:第一種是解釋執(zhí)行,即將字節(jié)碼逐條翻譯成機器碼并運行;第二種是即時編譯(JIT),他會將一個方法內的所有字節(jié)碼編譯成機器碼再執(zhí)行.

前者的優(yōu)勢無需等待編譯,但逐條解釋的代價就是運行速度會比后者慢,HotSpot默認采用混合模式,它會先解釋執(zhí)行字節(jié)碼,然后對于反復執(zhí)行的熱點代碼會去進行即時編譯.

即時編譯是監(jiān)理在復合二八定律的基礎上,即百分之20的代碼占據百分之80的計算資源.對于不常用的代碼我們無需消耗時間在編譯成機器碼上,采用解釋執(zhí)行就可以,而對于熱點代碼我們可以將其編譯成機器碼以提升運行速度.

HotSpot內置了幾個即時編譯器:Client Complier和Server Complier,簡稱為C1、C2編譯器,以便在編譯時間和生成代碼的執(zhí)行效率之間做取舍,C1編譯時間更快,C2編譯質量更高.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73290.html

相關文章

  • 深入理解Java虛擬機到底是什么

    摘要:由虛擬機加載的類,被加載到虛擬機內存中之后,虛擬機會讀取并執(zhí)行它里面存在的字節(jié)碼指令。虛擬機中執(zhí)行字節(jié)碼指令的部分叫做執(zhí)行引擎。 什么是Java虛擬機? 作為一個Java程序員,我們每天都在寫Java代碼,我們寫的代碼都是在一個叫做Java虛擬機的東西上執(zhí)行的。但是如果要問什么是虛擬機,恐怕很多人就會模棱兩可了。在本文中,我會寫下我對虛擬機的理解。因為能力所限,可能有些地方描述的不夠欠...

    宋華 評論0 收藏0
  • Java虛擬機中,字符串常量到底存放

    摘要:的三種常量池此外,有三種常量池,即字符串常量池又叫全局字符串池文件常量池運行時常量池。開始虛擬機把字符串常量池位置從永久代挪到堆,又徹底取消,把諸如之類的元數據都挪到堆之外管理。 前言 前陣子和朋友討論一個問題: 字符串常量歸常量池管理,那比如 String str = abc; abc這個對象是放在內存中的哪個位置,是字符串常量池中還是堆? 這句代碼的abc當然在常量池中,只有n...

    lewinlee 評論0 收藏0
  • 《深入理解java虛擬機》學習筆記系列——對象的內存布局

    摘要:上一篇文章講解了虛擬機中的內存布局,這里就稍作拓展,聊聊對象在虛擬機中的一些存儲細節(jié)吧。參考文檔深入理解虛擬機高級特效與最佳實現,第章周志明著系列筆記內存區(qū)域和機制明舞深入理解結構團長聯(lián)系作者 上一篇文章講解了 java 虛擬機中的內存布局,這里就稍作拓展,聊聊 java 對象在虛擬機中的一些存儲細節(jié)吧。 本文主要圍繞虛擬機中對象如何創(chuàng)建?對象內存都放些什么?如何訪問對象內存?這么三...

    miya 評論0 收藏0
  • 深度理解JVM-----運行時數據區(qū)域

    摘要:在之后,原來永久代的數據被分到了堆和元空間中。元空間存儲類的元信息,靜態(tài)變量和常量池等放入堆中。這樣能在一些場景中顯著提高性能,因為避免了在堆內存和堆外內存來回拷貝數據。 以下內容部分轉載于: CS-Notes showImg(http://ww1.sinaimg.cn/large/005NT19Ply1g385uooqv9j30kd0slmyw.jpg); 程序計數器(Program...

    tuantuan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<