• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java虛擬機(jī)實(shí)現(xiàn)原理分析

      2020-03-02 07:42:44溫立輝
      科技創(chuàng)新與應(yīng)用 2020年5期
      關(guān)鍵詞:跨平臺(tái)

      溫立輝

      摘? 要:針對(duì)虛擬機(jī)的底層實(shí)現(xiàn)原理及相關(guān)實(shí)現(xiàn)過(guò)程,討論了Java語(yǔ)言的跨平臺(tái)原理以及相關(guān)工作機(jī)制,分析了JVM底層各數(shù)據(jù)區(qū)內(nèi)存管理過(guò)程,闡述了JVM在Java語(yǔ)言中的核心作用以及重要地位。

      關(guān)鍵詞:JVM;跨平臺(tái);內(nèi)存管理;解釋器;類(lèi)加載

      中圖分類(lèi)號(hào):TP312? ? ? ? ?文獻(xiàn)標(biāo)志碼:A? ? ? ? ?文章編號(hào):2095-2945(2020)05-0053-02

      Absrtact: This paper discusses the cross platform principle and related working mechanism of Java language, analyzes the memory management process of each data area in the bottom layer of JVM, and expounds the core role and important position of JVM in Java language.

      Keywords: JVM; cross platform; memory management; interpreter; class loading

      1 概述

      Java語(yǔ)言的閃耀點(diǎn)是其跨平臺(tái)特性,使其征服了網(wǎng)絡(luò)編程界,而Java虛擬機(jī)以其獨(dú)特的作用及強(qiáng)大的功能支撐起Java平臺(tái)的強(qiáng)大地位,Java虛擬機(jī)是連接應(yīng)用程序與系統(tǒng)平臺(tái)及機(jī)器硬件的橋梁,是Java語(yǔ)言的核心基石。

      2 Java平臺(tái)分層原理

      1995年SUM公司正式對(duì)外發(fā)布了第一個(gè)版本的JDK后,在編程界引起了極大的反響,隨后幾年風(fēng)靡編程領(lǐng)域,從此之后各類(lèi)面向?qū)ο罂缙脚_(tái)編程猶如雨后春筍般的出現(xiàn)。把源文件轉(zhuǎn)換成字節(jié)碼文件,即可在各種環(huán)境中運(yùn)行,是Java語(yǔ)言的重要特征及顯耀的光芒,為何其具有如此強(qiáng)大的能力,歸根到底就是因?yàn)樘摂M機(jī)的重要作用。Java虛擬機(jī)在計(jì)算機(jī)編程領(lǐng)域又稱之為JVM,是一種用代碼語(yǔ)句來(lái)模擬計(jì)算機(jī)元件功能的實(shí)現(xiàn)包。

      大家都清楚,Java語(yǔ)言即不是一種完全解釋型的語(yǔ)言,也不是一種完全編譯型的語(yǔ)言,其源碼文件會(huì)在編譯命令的執(zhí)行過(guò)程中轉(zhuǎn)成字節(jié)碼文件,由于字節(jié)碼文件不是可執(zhí)行文件,因而其不能直接被操作系統(tǒng)調(diào)用執(zhí)行。字節(jié)碼是一種字節(jié)流文件,其以class類(lèi)型的文件存在,是一種跟平臺(tái)不相耦合的類(lèi)型文件,需要經(jīng)過(guò)JVM的翻譯轉(zhuǎn)換才能被硬件環(huán)境識(shí)別。Java平臺(tái)體系結(jié)構(gòu)可分為四層:最上面的為Java應(yīng)用程序?qū)?在此層的下面是API接口層,此層包含了眾多的JDK核心類(lèi)庫(kù);再往下一層就是JVM位置所在,JVM在此層完成字節(jié)碼解釋轉(zhuǎn)換工作,JVM層與API層共同構(gòu)成Java語(yǔ)言的運(yùn)行時(shí)環(huán)境(JRE);最下面一層為機(jī)器硬件平臺(tái)層,此層直接執(zhí)行由JVM解釋出來(lái)的二進(jìn)制命令。

      3 虛擬機(jī)工作原理

      Java虛擬機(jī)是操作系統(tǒng)中的一個(gè)job,所有Java應(yīng)用程序均歸屬某一個(gè)虛擬機(jī)實(shí)例,當(dāng)運(yùn)行作為Java程序起點(diǎn)的Main方法時(shí),JVM便被創(chuàng)建。JVM便被創(chuàng)建后,在虛擬機(jī)job運(yùn)行過(guò)程中會(huì)創(chuàng)建守護(hù)線程,守護(hù)線程的作用是監(jiān)測(cè)非守護(hù)線程的執(zhí)行過(guò)程,保障程序的完整執(zhí)行,直到應(yīng)用程序的退出。

      Java虛擬機(jī)是連接應(yīng)用與操作平臺(tái)的橋梁,從字節(jié)碼文件變成可執(zhí)行的機(jī)器命令,JVM的工作過(guò)程包含七個(gè)步驟,分別是:字節(jié)碼裝載、字節(jié)流校驗(yàn)、靜態(tài)變量初始化、引用轉(zhuǎn)換、對(duì)象實(shí)例化、反射調(diào)用、GC回收,如表1所示。

      第一步,裝載class類(lèi)型文件到內(nèi)存中。本階段的目標(biāo)是要對(duì)數(shù)據(jù)進(jìn)行初始化處理,銜接后繼步驟,完成整個(gè)JVM工作過(guò)程的第一步。

      在這一階段所要實(shí)現(xiàn)的具體內(nèi)容是要通過(guò)類(lèi)名來(lái)定位并導(dǎo)入相關(guān)的字節(jié)流,并生成一個(gè)與此類(lèi)相關(guān)聯(lián)的類(lèi)型對(duì)象,作為該類(lèi)的操作入口。

      第二步,進(jìn)行類(lèi)的鏈接操作。在這一階段主要負(fù)責(zé)將二進(jìn)制字節(jié)流的數(shù)據(jù)裝入JRE環(huán)境,此階段包含三個(gè)過(guò)程:字節(jié)流校驗(yàn)、靜態(tài)變量分配內(nèi)存空間、引用轉(zhuǎn)換。

      驗(yàn)證過(guò)程完成對(duì)源碼類(lèi)的檢查,以維護(hù)JVM自身的安全;準(zhǔn)備過(guò)程完成源碼類(lèi)型結(jié)構(gòu)的初始化;解析過(guò)程直接對(duì)常量值初始化。

      第三步,進(jìn)行Java類(lèi)的對(duì)象實(shí)例化過(guò)程。此步是加載過(guò)程最后一步,在此階段所要完成的任務(wù)是:執(zhí)行超類(lèi)、子類(lèi)中各種靜態(tài)語(yǔ)句塊,按順序執(zhí)行父類(lèi)、子類(lèi)的構(gòu)造器函數(shù)完成實(shí)例化過(guò)程。

      第四步,運(yùn)行Java類(lèi)的相關(guān)功能。在此階段類(lèi)的功能可以被機(jī)器以指令的方式執(zhí)行。

      第五步,卸載運(yùn)行完畢的類(lèi)對(duì)象。經(jīng)過(guò)垃圾回收機(jī)制(GC)處理的最終會(huì)被JVM從內(nèi)存中卸載。

      4 虛擬機(jī)內(nèi)存管理

      虛擬機(jī)運(yùn)行時(shí)會(huì)將正在使用的內(nèi)存空間劃分為不同的區(qū)域,每個(gè)區(qū)域負(fù)責(zé)不同的功能,各個(gè)區(qū)域的創(chuàng)建,銷(xiāo)毀過(guò)程也都不相同??偟膩?lái)說(shuō),JVM內(nèi)存空間劃分為兩大塊,數(shù)據(jù)共享區(qū)與私有區(qū),每大塊又可以進(jìn)一步細(xì)分,如表2。

      全局變量區(qū):用于存儲(chǔ)源碼類(lèi)中的全局變量,為各個(gè)線程的內(nèi)存數(shù)據(jù)共享區(qū)域。

      實(shí)例區(qū):存放用new關(guān)鍵字定義并經(jīng)過(guò)初始化的實(shí)例,此區(qū)空間會(huì)被GC釋放,同為數(shù)據(jù)共享區(qū)。

      局部變量區(qū):用于存儲(chǔ)源碼類(lèi)中的局部變量,數(shù)據(jù)為特定線程專(zhuān)用。局部變量周期與實(shí)例線程相同,為數(shù)據(jù)私有區(qū),不可共享。

      本地方法區(qū):與局部變量區(qū)類(lèi)似,只為本地局部Native方法使用,部分JVM中也會(huì)將其與虛擬機(jī)棧合并為一,同為數(shù)據(jù)私有區(qū),不可共享。

      字節(jié)碼指令區(qū):存儲(chǔ)實(shí)例線程下一步所要執(zhí)行的計(jì)算機(jī)指令,同為數(shù)據(jù)私有區(qū),不可共享。

      5 類(lèi)加載機(jī)制

      在JRE環(huán)境中,有多個(gè)層級(jí)的類(lèi)加載器,如表3所示。最頂層的為:JDK根類(lèi)加載器(Bootstrap),此類(lèi)為所有類(lèi)加載器的總父類(lèi),次級(jí)類(lèi)加載器(Extension)為其子類(lèi),直接繼承了此父加載器,次級(jí)加載器類(lèi)下面同樣也存在一個(gè)繼承子類(lèi),三級(jí)類(lèi)加載器(Application),在此子類(lèi)中開(kāi)放了自定義接口,自用戶可根據(jù)實(shí)際需要編碼以實(shí)現(xiàn)自定義加載器的開(kāi)發(fā)。

      同時(shí)在JRE環(huán)境中,加載器的裝載過(guò)程采用的是向上傳遞裝載的實(shí)現(xiàn)方式,當(dāng)加載器收到請(qǐng)求要進(jìn)行類(lèi)裝載時(shí),其會(huì)把相關(guān)請(qǐng)求發(fā)送給其直接父類(lèi),父加載器同樣會(huì)把請(qǐng)求向上遞歸傳遞,直到最頂層加載器。當(dāng)最頂層的加載器無(wú)法完成裝載任務(wù)時(shí),才會(huì)把請(qǐng)求交由子類(lèi)完成,這就保證了在任務(wù)場(chǎng)景下類(lèi)的加載任務(wù)均由最高的類(lèi)加載器完成,保證了所有類(lèi)型的實(shí)例對(duì)象具有相同的一致性,以避免應(yīng)用程序的混亂。

      6 結(jié)束語(yǔ)

      虛擬機(jī)并不是真正的機(jī)器,是一種通過(guò)代碼來(lái)實(shí)現(xiàn)硬件功能的插件包。虛擬機(jī)有自己的模擬硬件環(huán)境,如全局及局部變量區(qū)、本地方法區(qū)、字節(jié)碼區(qū)、實(shí)例區(qū)等,還有自己的指令系統(tǒng)。對(duì)Java語(yǔ)言跨平臺(tái)特性而言,虛擬機(jī)是其核心構(gòu)件,其直接關(guān)系應(yīng)用程序的完整、健康執(zhí)行,是Java語(yǔ)言的中樞組件。

      參考文獻(xiàn):

      [1]蘭斌.JVM優(yōu)點(diǎn)與缺點(diǎn)的深入分析[J].辦公自動(dòng)化,2013(3):22-24.

      [2]張鵬宇,鄭寶林.淺析JVM性能規(guī)范[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2011(3):111.

      [3]胡雯.Java虛擬機(jī)內(nèi)存分配探析[J].軟件導(dǎo)刊,2010(7):29-30.

      [4]劉冠梅.JAVA虛擬機(jī)技術(shù)研究與實(shí)踐思考[J].科技創(chuàng)新與應(yīng)用,2015(11):104-105.

      [5]楊文超.Java虛擬機(jī)內(nèi)存管理與優(yōu)化策略[J].電子測(cè)試,2013(10):43-44+62.

      [6]李卓恒.JAVA虛擬機(jī)相關(guān)技術(shù)研究與實(shí)踐[J].科技創(chuàng)新導(dǎo)報(bào),2018,15(01):156+158.

      [7]顧瑋.Java虛擬機(jī)的分析與研究[J].辦公自動(dòng)化,2017,22(09):35-36+11.

      猜你喜歡
      跨平臺(tái)
      跨層級(jí)網(wǎng)絡(luò)、跨架構(gòu)、跨平臺(tái)的數(shù)據(jù)共享交換關(guān)鍵技術(shù)研究與系統(tǒng)建設(shè)
      一款游戲怎么掙到全平臺(tái)的錢(qián)?
      潛力雙跨平臺(tái):進(jìn)階:誰(shuí)將跨入下一個(gè)“十大”?
      跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
      基于C++語(yǔ)言的跨平臺(tái)軟件開(kāi)發(fā)的設(shè)計(jì)
      基于C++語(yǔ)言的跨平臺(tái)軟件開(kāi)發(fā)
      移動(dòng)互聯(lián)網(wǎng)應(yīng)用跨平臺(tái)開(kāi)發(fā)
      一種虛擬現(xiàn)實(shí)應(yīng)用程序跨平臺(tái)方法的研究
      基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
      基于OPC跨平臺(tái)通信的電機(jī)監(jiān)測(cè)與診斷系統(tǒng)
      邯郸县| 额尔古纳市| 明星| 兰西县| 芦溪县| 开鲁县| 常山县| 分宜县| 昭觉县| 扎兰屯市| 淮北市| 鱼台县| 靖西县| 体育| 泌阳县| 轮台县| 莱州市| 姚安县| 千阳县| 镇巴县| 德江县| 万州区| 内丘县| 松桃| 类乌齐县| 甘孜县| 新田县| 宜城市| 龙里县| 常宁市| 光山县| 齐河县| 泰和县| 新河县| 新昌县| 周至县| 巴南区| 嘉黎县| 洪泽县| 聂荣县| 两当县|