在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    淺析 Java 程序語言的運(yùn)行機(jī)制

    淺析 Java 程序語言的運(yùn)行機(jī)制

    Java 程序語言的運(yùn)行機(jī)制

    Java 是一門高級(jí)語言,它既包含解釋型語言的特征, 也具有編譯型語言的特征。因?yàn)?Java 應(yīng)用程序是需要先經(jīng)過編譯,再進(jìn)行解釋兩個(gè)步驟。

    解釋型和編譯型

    計(jì)算機(jī)按照程序的執(zhí)行方式可以分為解釋型和編譯型。

    解釋型語言(Interpreted language)

    這種類型的編程語言,會(huì)將代碼一句一句直接運(yùn)行,不需要像編譯語言(Compiled language)一樣,經(jīng)過編譯器先行編譯為機(jī)器代碼,之后再運(yùn)行。這種編程語言需要利用解釋器,在運(yùn)行期,動(dòng)態(tài)將代碼逐句解釋(interpret)為機(jī)器代碼,或是已經(jīng)預(yù)先編譯為機(jī)器代碼的子程序,之后再運(yùn)行。

    理論上,任何編程語言都可以是編譯式,或解釋型的。它們之間的區(qū)別,僅與程序的應(yīng)用有關(guān)。許多編程語言同時(shí)采用編譯器與解釋器來實(shí)現(xiàn),其中包括 Lisp,Ruby,JavaScript 與 Python。JAVA 及 C# 采用混合方式,先將代碼編譯為字節(jié)碼,在運(yùn)行時(shí)再進(jìn)行解釋。

    編譯型語言(Compiled language)

    這類型的編程語言,通過編譯器來實(shí)現(xiàn)。它不像解釋型語言一樣,由解釋器將代碼一句一句運(yùn)行,而是以編譯器,先將代碼編譯為機(jī)器代碼,再加以運(yùn)行。理論上,任何編程語言都可以是編譯式,或直譯式的。它們之間的區(qū)別,僅與程序的應(yīng)用有關(guān)。

    兩者的優(yōu)缺點(diǎn)

    一般而言,用編譯語言寫成的程序,在運(yùn)行期的運(yùn)行速度,通常比用解釋型語言寫的程序快。因?yàn)槌绦蛟诰幾g期,已經(jīng)被預(yù)先編譯成機(jī)器代碼,可以直接運(yùn)行,不用像解釋型語言一樣,還要多一道直譯程序。

    但是要先進(jìn)行編譯,之后才能運(yùn)行程序,這也造成了編譯語言的缺點(diǎn)。一般而言,編譯語言的程序開發(fā)速度,以及調(diào)試時(shí)間,都是比較長(zhǎng)的。因?yàn)樗幌窠忉屝驼Z言可以寫完一行,或一小段程序之后,馬上運(yùn)行,馬上調(diào)試。解釋型語言通常讓程序開發(fā)的整體時(shí)間變少,在開發(fā)過程中,程序開發(fā)人員也可以更彈性、快速的測(cè)試自己的想法。

    為了改善編譯語言的效率而發(fā)展出的即時(shí)編譯技術(shù),已經(jīng)縮小了這兩種語言間的差距。這種技術(shù)混合了編譯語言與解釋型語言的優(yōu)點(diǎn),它像編譯語言一樣,先把程序源代碼編譯成字節(jié)碼。到運(yùn)行期時(shí),再將字節(jié)碼直譯,之后運(yùn)行。Java 與 LLVM 是這種技術(shù)的代表產(chǎn)物。

    Java 的運(yùn)行機(jī)制和 JVM

    Java 語言相對(duì)于獨(dú)立的解釋型和編譯型, 又有一些不一樣。區(qū)別在于編程器編譯的不是最終可以運(yùn)行的機(jī)器語言, 而是能夠運(yùn)行在 Java 虛擬機(jī) ( JVM: Java Virtual Machine)中的字節(jié)碼。Java 虛擬機(jī)只要是用來運(yùn)行 Java字節(jié)碼文件的虛擬機(jī)。不同的平臺(tái)上編譯器提供了統(tǒng)一的編程接口,而 Java 編譯器只需要面向 Java 虛擬機(jī), 生成虛擬機(jī)能夠運(yùn)行的代碼。 然后由 Java 虛擬機(jī)解釋執(zhí)行,并且在虛擬機(jī)中把代碼轉(zhuǎn)換成平臺(tái)能夠識(shí)別的機(jī)器碼來運(yùn)行程序, 從而做到了一次編譯, 多個(gè)平臺(tái)運(yùn)行的跨平臺(tái)特性。

    流程大概如下:

    這里 JVM 也就是 Java 虛擬機(jī)中介的概念。 原先你要去租房, 你有一個(gè)要租房的“需求”(源代碼), 而每個(gè)房東都是你的“運(yùn)行”環(huán)境。 沒看一次房子都需要單獨(dú)的找到對(duì)應(yīng)房子的房東進(jìn)行 “租”(編譯) 的過程。 這個(gè)時(shí)候, 有個(gè)房屋托管(虛擬機(jī))說, 你不要找房東了太麻煩, 我這有這個(gè)區(qū)的“房源”, 你來找我就好, 這樣你以后租房子就可以只找這個(gè)中介就可以看這個(gè)區(qū)的房子, 這樣的話, 你不用來回和不同的房東打交道, 你也不需要知道這些房東是男是女, 是好說話還是不好說話。 但是既然是中間打的交道, 就需要有一些性能的損耗(傭金)。并且你能看多少套房子,就取決于中介有多少房源。 也就是 Java 虛擬機(jī)能在那運(yùn)行, 你的程序就可以在那運(yùn)行。

    JVM

    JVM 是 Java Virtual Machine 的縮寫。它是一種基于計(jì)算設(shè)備的規(guī)范,是一臺(tái)虛擬機(jī),即虛構(gòu)的計(jì)算機(jī)。

    JVM屏蔽了具體操作系統(tǒng)平臺(tái)的信息(顯然,就像是我們?cè)陔娔X上開了個(gè)虛擬機(jī)一樣),當(dāng)然,JVM 執(zhí)行字節(jié)碼時(shí)實(shí)際上還是要解釋成具體操作平臺(tái)的機(jī)器指令的。

    通過 JVM,Java 實(shí)現(xiàn)了平臺(tái)無關(guān)性,Java 語言在不同平臺(tái)運(yùn)行時(shí)不需要重新編譯,只需要在該平臺(tái)上部署 JVM 就可以了。因而能實(shí)現(xiàn)一次編譯多處運(yùn)行。(就像是你的虛擬機(jī)也可以在任何安了 VMWare 的系統(tǒng)上運(yùn)行)。

    JVM結(jié)構(gòu)

    • 程序計(jì)數(shù)器(Program Counter)
    • Java堆(Heap)
    • Java虛擬機(jī)棧(Stack)
    • 本地方法棧(Native Stack)
    • 方法區(qū)(Method Area)
    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月2日 23:15
    下一篇 2022年7月2日 23:15

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息