深入分析 Hello World 程式
public class HelloWorld{
public static void main(String[] args){
String s = "Hello World";
System.out.println("s = "+s);
}
}
複製程式碼
整個程式的執行流程?
- 編譯器將 HelloWorld.java 原始檔編譯成位元組碼檔案 HelloWorld.class ,再由 JVM 將 HelloWord 類載入到方法區的類程式碼記憶體區域。
- JVM 開始執行 main 方法,期間會載入 String[].class ,以及傳送一個 String 型別陣列 args[]
- 載入 String.class 到方法區,在棧記憶體區開闢 String 變數 s ,在方法區的常量區開闢 Hello World 物件。
- 載入 System.class 類,給 System.out 物件在堆區開闢空間,最後在方法區的常量記憶體空間構造一個新的字串物件 s = Hello World
- 最後呼叫 System.out 物件的 println 方法在控制檯中輸出字串。
記憶體分析模型圖
理解了記憶體就理解了一切,學會分析 Java 程式在記憶體中的分佈情況,才能寫出更好的程式。
這個過程一共涉及到了些什麼?
- 原始檔: HelloWorld.java
- 類檔案:String.class 、 String[].class 、 System.class 、 HelloWorld.class
- 物件:“s = Hello World” 、 “Hello World” 、 String.out 、 String.in 、 String.error 、 args
- 方法:main() 、 toString() 、println()
- 變數:args 、 s