核桃干貨 | Java9新特性有哪些新特性?

一、前言
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í)行過程
接下來是具體的執(zhí)行過程,總共包含五個步驟:編譯、加載、執(zhí)行 main 方法、執(zhí)行成員方法、方法返回。
Step1:編譯
首先,在我們完成上述這段源碼之后,要想讓程序跑起來,我們需要將其編譯成為字節(jié)碼文件。字節(jié)碼是一種跨平臺的JVM機器語言,它能夠被JVM所解析,而無關(guān)底層的操作系統(tǒng)。
Step2:加載
當(dāng)代碼需要被調(diào)用時,JVM 會加載目標字節(jié)碼至方法區(qū),并轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)結(jié)構(gòu),這里的加載過程是通過類加載器完成的。然后內(nèi)存中(不一定是堆)會生成一個代表這個類的 java.lang.Class 對象,作為方法區(qū)這個類的各種數(shù)據(jù)結(jié)構(gòu)的訪問入口。

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


三、雜談
評論
圖片
表情
