0%

[java] Memory 管理

Java 的 Memory 主要分成 stack 及 heap 兩部份,每個 thread 都有各自對應的 stack,stack 是個 first in last out 的資料結構。每當一個 code block 結束時,他 stack 內的 variable 就會因被 pop 出來而消失;heap 的空間則由所有 thread 共享。

Java 的所有 Objects 都存放在 heap 內,int, double, floatprimitive type 的local variables 則存在 stack 裡。

當你宣告String s = "Hello;"時,stack 內會產生一個指向"Hello"物件且名稱是s的參數。

圖一
stack heap

garbage collection 會釋放 heap 內所有無法從 stack 指向的物件。例如有段程式碼長這樣:

String s = "Hello";
s = "world";

當執行到第 1 行時,stack 跟 heap 的狀態會像圖一那樣。執行第 2 行會導致 "Hello" 無法從 stack 內任何參數 reference 到,所以 "Hello" 在 garbage collection 後會被清掉。

圖二
stack heap