此为历史版本和 IPFS 入口查阅区,回到作品页
MartinYeung
IPFS 指纹 这是什么

作品指纹

Java - Stack 與 Heap 的分別

MartinYeung
·
·

閱讀時間: 10分鐘

在使用Java開發程式的過程中,相信大家都可能見過stack和heap這兩個字,例如在一些Error中、在JVM中做一些設定(heap memory space跟stack memory space)等等。

但有部分人都未必真正了解這些字眼有什麼分別,想知道它們其實代表什麼,可以留下來,等我為你們講解一下。

它們都是JVM記憶體管理的一部分。

Stack

Stack是記憶體的其中一個部分

在程式中的local primitive variables、local object reference variables都會被儲存在Stack。

每一個 Thread 都擁有屬於自己的Stack。

Stack 是一種 後入先出 LIFO (last in, first out)的操作特色,優點是存取速度快和簡單管理。正因為Stack的特性,所以一些完全可預測變數或函數都會存放在Stack以違到讓系統可以全自動化管理的目的。

例子解釋:

public void Method1()
{
    int i = 4; 
}

int i = 4,由於這個變數很明顯地只能在執行Method1時才能用到,所以它的生命周期是可預測的。自然就可以存放在stack。

public void Method2()
{
    Method1();
}

Method1 只有在執行Method2時才能用到,所以它包含的變數也可以存放在stack。

Heap

Heap是記憶體的其中一個部分。

在程式中的instances/objects、instance variables都會被儲存在Heap直到不被使用為止/不受任何參考時。

在Java中的Garbage Collector機制會自動去刪除在Heap中沒有用的資料。

public static void main(String... ar)
{
Method3 o1= new Method3(); 
//Method3 的物件會儲存在heap但它的reference variable –o1 會儲存在stack。
}
}


CC BY-NC-ND 2.0 授权