iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
Build on Google AI

把Google AI當夥伴打造個人高效Coding工作流系列 第 3 篇

第三天記憶體Heap模型與「只有Pass by Value」

  • 分享至 

  • xImage
  •  

一、 物件實體化的底層
https://ithelp.ithome.com.tw/upload/images/20260930/201843504vSZBToVwg.png

  • User user宣告變數:
    在當前方法的Stack中分配一個局部變數空間,名稱為 user。
    此時它只是一個引用(Reference),裡面尚未綁定任何實體。
  • new User("Alice")實體化:
    在Heap申請一塊記憶體空間,根據User類別的定義分配屬性欄位。
    呼叫建構子初始化資料(name = "Alice")。
    擁有了實體的記憶體位址。
  • =(賦值運算):
    將Heap上的記憶體位址賦值給Stack上的user變數。

二、為什麼 Java 只有 Pass by Value?
Pass by Value(傳值呼叫):呼叫方法時,傳遞的是值的複本。
Pass by Reference(傳參考呼叫):呼叫方法時,傳遞的是變數本身的記憶體位址。
不論是基本型別還是物件,全部都是「Pass by Value」。


三、 物件生命週期與垃圾回收
https://ithelp.ithome.com.tw/upload/images/20260930/20184350jfcDXCBbVH.png

  • 當process()方法執行完畢,Stack上的棧幀被銷毀,局部變數temp消失。
  • Heap上的User("TempData") 實體失去了所有外部引用,這被稱為「Unreachable Object」。
  • JVM的垃圾回收不會立刻清理它,而是在後續執行階段,透過可達性分析(Reachability Analysis)確認它已經無法被任何觸及,才排程將其記憶體空間回收。


上一篇
第二天複習記憶體分配的邏輯
下一篇
第四天 物件初始化完整順序與 this 核心
系列文
把Google AI當夥伴打造個人高效Coding工作流 共 6 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言