我已經學習Java近一年了,但在動態內存分配方面仍然感到困惑。java動態內存分配
問題1:任何人都可以詳細說明當根據我寫的步驟執行下面的代碼時,在內存中發生了什麼(請糾正我,如果我錯了)?越詳細越好。
問題2:如果我想深入瞭解JVM或Java內存,應該閱讀/訪問什麼樣的書/網站?
class Student {
private static int counter;
private String name;
private int age;
private String grade = "grade 1";
Student(String _name, int _age) {
this.name = _name;
this.age = _age;
}
public static void main(String[] args){
Student s = new Student("Emma", 6);
}
}
Student.class
文件獲取加載,靜態變量counter
時初始化數據區。main()
被調用,JVM爲堆棧中的本地變量s
分配內存。- JVM爲堆上的成員變量
name
,age
和grade
分配存儲,併爲存儲分配零。 grade
初始化爲"grade 1"
。- 構造
Student()
被調用初始化新的實例:JVM對堆棧_name
和_age
分配內存,它們初始化爲"Emma"
和6
,那麼它們的值複製到成員變量name
和age
。 - JVM將此新實例分配給
s
。
這似乎是一個相當準確的描述給我。有沒有你不確定的地方?你的第二個問題可能是Stack Overflow的問題。我們有責任避免在這裏推薦資源。 –
確保您必須交換點**(1)**是**(2)**。在類加載器完成加載類* Student *之後,將初始化類的靜態成員。 – Sandro
@Sandro該類必須先加載才能運行其任何方法。交換點(1)和(2)是不可能的。 –