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

資訊專欄INFORMATION COLUMN

Java代碼如何運(yùn)行在Java虛擬機(jī)中

whjin / 2216人閱讀

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

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

Java為什么要在虛擬機(jī)中運(yùn)行

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

Java虛擬機(jī)如何運(yùn)行Java字節(jié)碼

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/73290.html

相關(guān)文章

  • 深入理解Java虛擬機(jī)到底是什么

    摘要:由虛擬機(jī)加載的類,被加載到虛擬機(jī)內(nèi)存中之后,虛擬機(jī)會(huì)讀取并執(zhí)行它里面存在的字節(jié)碼指令。虛擬機(jī)中執(zhí)行字節(jié)碼指令的部分叫做執(zhí)行引擎。 什么是Java虛擬機(jī)? 作為一個(gè)Java程序員,我們每天都在寫Java代碼,我們寫的代碼都是在一個(gè)叫做Java虛擬機(jī)的東西上執(zhí)行的。但是如果要問什么是虛擬機(jī),恐怕很多人就會(huì)模棱兩可了。在本文中,我會(huì)寫下我對(duì)虛擬機(jī)的理解。因?yàn)槟芰λ蓿赡苡行┑胤矫枋龅牟粔蚯?..

    宋華 評(píng)論0 收藏0
  • Java虛擬機(jī)中,字符串常量到底存放

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

    lewinlee 評(píng)論0 收藏0
  • 《深入理解java虛擬機(jī)》學(xué)習(xí)筆記系列——對(duì)象的內(nèi)存布局

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

    miya 評(píng)論0 收藏0
  • 深度理解JVM-----運(yùn)行時(shí)數(shù)據(jù)區(qū)域

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

    tuantuan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<