首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 內存模型:成員變量與局部變量的存儲區別

     編輯:程式設計疑難解答

核心結論

成員變量(字段)始終存儲在堆內存中,無論是基本類型還是引用類型。引用變量本身(指向對象的指針)才可能存放在棧幀(局部變量區)或堆中(作為另一個對象的字段)。

詳細說明

  • 局部變量:基本類型直接在棧幀存值;引用類型在棧幀存引用地址,對象實體在堆。
  • 成員變量:隨對象實例分配在堆中。引用類型成員變量存的是對象地址,指向堆中另一個對象。
  • 創建對象時:構造方法的參數是局部變量(棧),賦值給成員變量(堆)後,參數銷毀,成員變量持有引用。

圖解記憶

Stack (棧)          Heap (堆)
---------           ---------
main()              Object A
  - refA  ────────►  field1 (int)
                     fieldB (Ref) ──────► Object B
                                        fieldX ...

理解這一點對分析逃逸分析、GC 根節點、線程安全至關重要。

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