<samp id="tdkee"></samp>

    <mark id="tdkee"><acronym id="tdkee"></acronym></mark>

  1. 免费看又黄又无码的网站_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片_日本最新免费二区三区

    ×

    Java究竟為什么需要 JVM(Java虛擬機(jī))?

    • 作者:新網(wǎng)
    • 來(lái)源:新網(wǎng)
    • 瀏覽:100
    • 2018-05-03 17:50:16

    JVM是一種規(guī)定好的標(biāo)準(zhǔn)規(guī)范, 定義了.class文件在其內(nèi)部運(yùn)行的相關(guān)標(biāo)準(zhǔn)和規(guī)范。一般來(lái)講,所有的JVM都是基于棧結(jié)構(gòu)的運(yùn)行方式。那么不符合這種要求的,不算是JVM, 如Android中所使用的Dalvik 虛擬機(jī)就不能稱(chēng)作是JAVA 虛擬機(jī), 因?yàn)樗腔诩拇嫫鳌?/p>

       5fe3d114-83b1-4915-b2dc-75977c746cae.jpg

    <div>   JVM是一種規(guī)定好的標(biāo)準(zhǔn)規(guī)范, 定義了.class文件在其內(nèi)部運(yùn)行的相關(guān)標(biāo)準(zhǔn)和規(guī)范。一般來(lái)講,所有的JVM都是基于棧結(jié)構(gòu)的運(yùn)行方式。那么不符合這種要求的,不算是JVM, 如Android中所使用的Dalvik 虛擬機(jī)就不能稱(chēng)作是JAVA 虛擬機(jī), 因?yàn)樗腔诩拇嫫鳌?/div>
      JVM相關(guān)實(shí)現(xiàn)的產(chǎn)品有很多, 通常最有名最常用的就是現(xiàn)在Oracle公司所有的HotSpot 虛擬機(jī)。
      Java語(yǔ)言與 JVM之間的關(guān)系
      Java程式可以跨平臺(tái),這是你在許多書(shū)或文件早就看過(guò)的描述,但是跨平臺(tái)是怎麼一回事?在這之前,你得先了解跨平臺(tái)是怎麼一回事。
      其實(shí)對(duì)于電腦而言,它只認(rèn)識(shí)一種語(yǔ)言,也就是0101序列所組合而成的指令。當(dāng)你使用的是C/C++等之類(lèi)的高階語(yǔ)言編寫(xiě)代碼時(shí),其實(shí)這些語(yǔ)言,都是比較貼近人類(lèi)語(yǔ)言的語(yǔ)法,不過(guò)大部門(mén)都是英語(yǔ)語(yǔ)義,對(duì)我們來(lái)說(shuō)還是不夠親切,這都是很多小白入門(mén)學(xué)習(xí)的障礙了。這是為了方便人類(lèi)閱讀及編寫(xiě),計(jì)算機(jī)也看不懂C/C++這類(lèi)語(yǔ)言。
      你要有個(gè)「翻譯員」將你寫(xiě)的C/C++代碼,翻譯為電腦看得懂的0101序列指令,這個(gè)翻譯員就是所謂的「編譯器」(Compiler):
      問(wèn)題在于,每個(gè)平臺(tái)所認(rèn)識(shí)的0101序列并不一樣。在Windows上也許某個(gè)指令是0101,在Linux下也許是1010,因此不同的平臺(tái)必須使用不同的編譯器來(lái)編譯你的代碼,而在Windows平臺(tái)上編譯好的程序,也不能直接拿到Linux等其它平臺(tái)上執(zhí)行,而必須經(jīng)過(guò)重新編譯的動(dòng)作,讓編譯器將你的程式編譯為該平臺(tái)可以執(zhí)行的指令。
      由于每個(gè)平臺(tái)的特性不同,可引用的函數(shù)程序庫(kù)(Library)不同,也許你的代碼還得作修改,才可以在另一個(gè)平臺(tái)上編譯執(zhí)行。這很不方便,就是說(shuō)如果你在Windows設(shè)計(jì)了一款游戲,想要賣(mài)給Linux的使用者,就得再花費(fèi)一些功夫。這也是為什么大部分游戲或者軟件只能在Windows運(yùn)行了。
      Java 也是個(gè)高階語(yǔ)言,要讓電腦執(zhí)行你編寫(xiě)的應(yīng)用程序,也是得借助編譯器的翻譯。不過(guò),Java編譯時(shí),并不直接翻譯為相依于某平臺(tái)的0101指令,而是翻譯為中介格式的位元碼(byte code)。Java 的原始碼文件格式名為*.java,經(jīng)過(guò)編譯器翻譯過(guò)后,會(huì)變成*.class的格式文件位元碼。如果想要執(zhí)行這個(gè)位元碼檔案,目標(biāo)平臺(tái)上必須安裝有JVM(Java Virtual Machine)。JVM會(huì)將位元碼翻譯為相應(yīng)平臺(tái)支持的語(yǔ)言。
      不同的平臺(tái)必須安裝該平臺(tái)相對(duì)應(yīng)的JVM。這就好比你講中文(*.java),Java編譯器幫你翻譯為英文(*.class)。之后該英文文件,到當(dāng)?shù)刂?,再由?dāng)?shù)乜吹枚⑽牡娜朔g為當(dāng)?shù)氐姆窖浴?/div>
      所以JVM所擔(dān)任的職責(zé)之一,就是當(dāng)?shù)氐姆g員,將位元碼文件翻譯為當(dāng)時(shí)作業(yè)系統(tǒng)看得懂的0101序列。不過(guò)這不是最重要的,基本上如果只是要翻譯員的話(huà),直譯器(Interpreter )就辦得到了。
      JVM有個(gè)很重要的觀(guān)念就是:「對(duì)于Java程式而言,其實(shí)它只認(rèn)識(shí)一種作業(yè)系統(tǒng)(或說(shuō)是一種機(jī)器),這個(gè)系統(tǒng)叫作JVM,而對(duì)于JVM而言,位元碼文件就是它的可執(zhí)行文件!也就是格式為.class的文件。Java代碼程序,理想上,并不用理會(huì)真正執(zhí)行于哪個(gè)平臺(tái)之上,它只要知道如何執(zhí)行于JVM之上就可以了,至于JVM實(shí)際上如何與底層平臺(tái)作溝通,則是JVM自己的事!」這個(gè)觀(guān)念非常的重要,對(duì)于以后能夠搞清楚所PATH變量與CLASSPATH變量的概念,也有一定的幫助。
     

    免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

    免費(fèi)咨詢(xún)獲取折扣

    Loading
    国产精品视频白浆免费视频_久久久高清国产免费观看_亚洲一区二区三区在线免费观看_免费欧洲美女a视频一级毛片

    <samp id="tdkee"></samp>

        <mark id="tdkee"><acronym id="tdkee"></acronym></mark>