先用一張圖展現一下Java堆棧的概況jvm
方法區:class文件信息,運行時常量池,以及編譯器編譯後的代碼
堆:存儲對象,對象包含類的信息,指向方法區學習
虛擬機棧:表示Java方法執行的內存模型,每調用一個方法就會爲每一個方法生成一個棧幀(Stack Frame),用來存儲局部變量表、操做數棧、動態連接、方法出口等信息。每一個方法被調用和完成的過程,都對應一個棧幀從虛擬機棧上入棧和出棧的過程。虛擬機棧的生命週期和線程是相同的this
本地方法棧:一個支持native方法調用的JVM實現spa
程序計數器:程序計數器用來記錄當前正在執行的指令線程
用一個十分簡單的代碼段模擬一下Java堆棧的運行過程:code
public class AppTest { public static void main(String[] args) { Person person = new Person("張三"); person.sayHello(); } } class Person { String name; public Person(String name) { this.name = name; } public void sayHello() { System.out.println("hello " + name); } }
下面用一段十分簡單的代碼段描述一下棧的運行過程。視頻
public class AppTest { public static void main(String[] args) { int a = 1; int b = 2; int c = add(a , b); } private static int add(int a, int b) { return a + b; } }
總結:對象
學習了一段時間Java虛擬機以後才發現Java虛擬機是如此的複雜,也體會到了本身的內功的不足,學習的過程當中很大程度上參考的雲析學院的視頻,和Java虛擬機精講這本書,在此表示感謝。生命週期