首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 程序內存模型圖解:棧、堆、方法區與對象生命週期

     編輯:Java 綜合教學

Java 程序內存模型圖解:棧、堆、方法區與對象生命週期

理解 JVM 內存分配是 Java 開發者進階的必修課。本文通過一個 Student 類示例,逐步演示程序運行時棧、堆、方法區的動態變化。

核心概念速覽

  • 棧:存基本類型、局部變量、對象引用(地址),方法執行完自動回收
  • 堆:存 new 創建的對象實例,由 GC 管理
  • 方法區:存類信息、靜態變量、常量、方法字節碼,全局共享

示例代碼

public class Student {
    private String name;
    private int age;
    public void study() { System.out.println("I love study!"); }
    // getter/setter 省略
}

public class StudentDemo {
    public static void main(String[] args) {
        Student student = new Student();           // 第5行
        System.out.println(student.getName() + ":" + student.getAge()); // 第7行
        student.setName("John");                   // 第8行
        student.setAge(23);                        // 第9行
        System.out.println(student.getName() + ":" + student.getAge()); // 第10行
        student.study();                           // 第12行
        Student student2 = student;                // 第14行
        student2.setName("Jack");                  // 第15行
        student2.setAge(25);                       // 第16行
        System.out.println(student2.getName() + ":" + student2.getAge()); // 第17行
        System.out.println(student.getName() + ":" + student.getAge());   // 第18行
    }
}

內存演變過程圖解

1. 類加載階段

類加載後內存
Student/StudentDemo 類加載到方法區,方法分配內存地址標記

2. main 入棧,創建 student 對象

創建對象
堆中分配 Student 實例,棧中引用指向堆地址,成員變量初始值 name=null, age=0

3. 設置屬性值

設置屬性
通過引用找到堆對象,修改 name="John", age=23

4. 調用 study() 方法

方法調用
棧中為 study() 分配幀,執行完畢立即出棧銷毀

5. student2 引用賦值

引用賦值
student2 指向同一堆對象,非創建新對象

6. 通過 student2 修改屬性

修改屬性
雙引用指向同一對象,修改對雙方可見

7. main 結束,棧幀銷毀

main結束
main 棧幀出棧,堆對象等待 GC 回收

執行結果驗證

null:0
John:23
I love study!
Jack:25
Jack:25

核心結論

  1. 引用賦值(student2 = student)傳遞的是地址,非複製對象
  2. 多個引用指向同一對象,修改對所有引用可見
  3. 基本類型存棧,引用類型引用存棧、對象存堆
  4. 方法區存類元數據,方法共享節省內存

掌握內存模型,能避免「引用修改副作用」、「內存洩漏」、「OOM」等經典問題,寫出更健壯的代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved