内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

怎么理解Java執(zhí)行過(guò)程中的內(nèi)存模型變化

今天就跟大家聊聊有關(guān)怎么理解Java 執(zhí)行過(guò)程中的內(nèi)存模型變化,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)主營(yíng)安定網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app開發(fā),安定h5小程序開發(fā)搭建,安定網(wǎng)站營(yíng)銷推廣歡迎安定等地區(qū)企業(yè)咨詢

主要工作:嘗試以時(shí)間順序追蹤一遍 Java 執(zhí)行的整個(gè)過(guò)程,以及展示 JVM 中內(nèi)存模型的相應(yīng)變化。

主要目的:希望能夠通過(guò) Java 執(zhí)行過(guò)程的冰山一角,增進(jìn)對(duì)編程語(yǔ)言工作原理的理解。

以下面這段代碼為例,追蹤它的執(zhí)行過(guò)程:

public class Car {
    private int speed;

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public void getSpeed() {
        System.out.println(speed);
    }

    public static void main(String[] args) {
        Car car = new Car();
        car.setSpeed(3);
        car.getSpeed();
    }
}
二、執(zhí)行過(guò)程

接下來(lái)是具體的執(zhí)行過(guò)程,總共包含五個(gè)步驟:編譯、加載、執(zhí)行 main 方法、執(zhí)行成員方法、方法返回。

Step1:編譯

首先,在我們完成上述這段源碼之后,要想讓程序跑起來(lái),我們需要將其編譯成為字節(jié)碼文件。字節(jié)碼是一種跨平臺(tái)的JVM機(jī)器語(yǔ)言,它能夠被JVM所解析,而無(wú)關(guān)底層的操作系統(tǒng)。

Step2:加載

當(dāng)代碼需要被調(diào)用時(shí),JVM 會(huì)加載目標(biāo)字節(jié)碼至方法區(qū),并轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu),這里的加載過(guò)程是通過(guò)類加載器完成的。然后內(nèi)存中(不一定是堆)會(huì)生成一個(gè)代表這個(gè)類的 java.lang.Class 對(duì)象,作為方法區(qū)這個(gè)類的各種數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)入口。

怎么理解Java 執(zhí)行過(guò)程中的內(nèi)存模型變化

Step3:執(zhí)行 main 方法

main 方法可以通過(guò) java.lang.Class 對(duì)象進(jìn)行調(diào)用,參考如下代碼:

Method method = targetClass.getDeclareMethod("main", String[].class);
method.invoke(null, (Object) new String[0]);

之后 PC 寄存器將會(huì)指向方法區(qū)中的 main 函數(shù)地址,線程棧中會(huì)生成對(duì)應(yīng)的棧楨,其主要用于存放當(dāng)前方法的局部變量表、操作棧、以及方法返回地址。接下來(lái),PC 寄存器向后地址偏移,執(zhí)行引擎開始執(zhí)行 main 方法體。當(dāng)語(yǔ)句 Car car = new Car() 執(zhí)行完畢,棧楨與堆中的相應(yīng)變化如下:

怎么理解Java 執(zhí)行過(guò)程中的內(nèi)存模型變化

Step4:執(zhí)行成員方法

對(duì)象 car 的 setSpeed 方法調(diào)用過(guò)程和 main 類似,通過(guò)索引 car 的成員方法地址,PC寄存器將指向方法區(qū)中的 setSpeed 函數(shù)地址,同時(shí)線程棧中將產(chǎn)生新的棧楨,其中的方法返回地址用于保存原有 PC 地址偏移。當(dāng)賦值語(yǔ)句 this.speed = speed 執(zhí)行完畢,棧楨與堆中發(fā)生的相應(yīng)變化如下:

怎么理解Java 執(zhí)行過(guò)程中的內(nèi)存模型變化

Step5:方法返回

隨著 setSpeed 方法的執(zhí)行結(jié)束,Stack 中的相應(yīng)棧楨出棧,棧頂指針重新指向 main 棧楨。同時(shí) PC 寄存器將根據(jù)方法返回地址進(jìn)行還原,從而繼續(xù)執(zhí)行 main 的方法體。當(dāng) main 方法也執(zhí)行完畢出棧后,主線程與虛擬機(jī)實(shí)例銷亡,程序結(jié)束。

虛擬機(jī)或某一門程序語(yǔ)言,作為一種底層實(shí)現(xiàn),可以滿足上層用戶的絕大部分需求,但是需求是與時(shí)俱進(jìn)的,總有一天用戶需要編寫自己的底層實(shí)現(xiàn),比如組件、框架、一門新語(yǔ)言。這時(shí)需要打開原有的規(guī)范,先破壞它,再重建它,從而定義自己的規(guī)范。這也許是我們需要探究底層的緣由之一吧。

看完上述內(nèi)容,你們對(duì)怎么理解Java 執(zhí)行過(guò)程中的內(nèi)存模型變化有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文標(biāo)題:怎么理解Java執(zhí)行過(guò)程中的內(nèi)存模型變化
URL標(biāo)題:http://www.rwnh.cn/article8/jgpoop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站改版網(wǎng)站設(shè)計(jì)、Google、用戶體驗(yàn)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
蓬安县| 尼玛县| 商南县| 页游| 阿勒泰市| 加查县| 安新县| 博野县| 凯里市| 平定县| 东安县| 睢宁县| 陇南市| 彩票| 罗定市| 长白| 剑河县| 长宁县| 迭部县| 太仆寺旗| 东乡县| 湘西| 郸城县| 银川市| 营山县| 于都县| 磐安县| 阳泉市| 大理市| 波密县| 洛隆县| 祁连县| 眉山市| 泗阳县| 黄冈市| 绵竹市| 汤原县| 客服| 长宁县| 达拉特旗| 肇州县|