此時眾多的Javaer會不經意發問:學Java還有未來麼?
你可以嫌棄Java, 但是可以永遠相信JVM! 在雲原生如日中天、Serverless日漸成熟、新語言百花齊放的當下,跨語言、Native支援、高效能低資源佔用的技術必定是其璀璨的明珠,而GraalVM正是這樣一個承載了JVM未來,將Java帶入下一波技術的弄潮兒。
「一次編寫,到處執行「是Java語言的特性,這一重要特性依靠的是JVM虛擬機器器
在討論GraalVM之前,我們先聊下Java程式碼是怎麼執行的?
從硬體視角來看,Java位元組碼無法直接執行。因此,Java虛擬機器器需要將位元組碼翻譯成機器碼。
從虛擬機器器視角來看,執行Java程式碼首先需要將它編譯而成的 class 檔案載入到 Java 虛擬機器器中。載入後的 Java 類會被存放於方法區(Method Area)中。實際執行時,虛擬機器器會執行方法區內的程式碼。Java 虛擬機器器同樣也在記憶體中劃分出堆和棧來儲存執行時資料。
不同的是,Java 虛擬機器器會將棧細分為面向 Java 方法的 Java 方法棧,面向本地方法(用 C++ 寫的 native 方法)的本地方法棧,以及存放各個執行緒執行位置的 PC 暫存器。
在執行過程中,每當呼叫進入一個 Java 方法,Java 虛擬機器器會在當前執行緒的 Java 方法棧中生成一個棧幀,用以存放區域性變數以及位元組碼的運算元。這個棧幀的大小是提前計算好的,而且 Java 虛擬機器器不要求棧幀在記憶體空間裡連續分佈。
當退出當前執行的方法時,不管是正常返回還是異常返回,Java 虛擬機器器均會彈出當前執行緒的當前棧幀,並將之捨棄。