這篇文章主要介紹了詳解Java 中程式記憶體的分析的相關資料,需要的朋友可以參考下
這篇文章將簡單的說明下當我們執行Java程式時JVM(Java虛擬機)的記憶體分配情況。
首先我們先來感觀的認識下幾個名詞:
1、堆疊,一般來說,基本資料型別直接在在堆疊中分配空間,局部變數(在方法代碼段中定義的變數)也在堆疊中直接分配空間,當局部變數所在方法執行完成之後該空間便立刻被JVM回收,還有一種是引用資料類型,即我們通常所說的需要用關鍵字new建立出來的物件所對應的參考也是在堆疊空間中,此時,JVM在堆疊空間中給物件參考分配了一個位址空間(相當於一個門牌號,透過這個門牌號就可以找到你家),在堆空間中給該引用的物件一個空間,堆疊空間中的位址引用指向了堆空間中的物件區(透過門牌號碼找住址);
2、堆,一般用來存放用關鍵字new出來的資料。
接下來我們再透過一段程式來直覺地感受下程式執行時間JVM的記憶體狀況,
package demo; public class Student { private String name; private int age; public void study() { System.out.println("I love study!"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package demo; public class StudentDemo { public static void main(String[] args) { Student student = new Student(); System.out.println(student.getName() + ":" + student.getAge()); student.setName("John"); student.setAge(23); System.out.println(student.getName() + ":" + student.getAge()); student.study(); Student student2 = student; student2.setName("Jack"); student2.setAge(25); System.out.println(student2.getName() + ":" + student2.getAge()); System.out.println(student.getName() + ":" + student.getAge()); } }
當我們執行程式時,JVM會把Student類別與StudentDemo類別編譯完然後載入到JVM中一個叫做方法區的地方,類別的成員變數與成員方法也被載入到方法區中,此時記憶體模型如下
null:0 John:23 I love study! Jack:25 Jack:25
以上是關於程式記憶體的java程式碼分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!