1. 程式人生 > >常量池和棧,堆是區別

常量池和棧,堆是區別

1. 常量池:存放字串常量和基本型別常量(public static final)。 常量值通常直接存放在程式程式碼內部,這樣做是安全的,因為它們永遠不會被改變。
2.堆:一種通用性的記憶體池(也存在於RAM中),用於存放所以的JAVA物件。堆不同於堆疊的好處是:編譯器不需要知道要從堆裡分配多少儲存區域,也不必知道儲存的資料在堆裡存活多長時間。因此,在堆裡分配儲存有很大的靈活性。當你需要建立一個物件的時候,只需要new寫一行簡單的程式碼,當執行這行程式碼時,會自動在堆裡進行儲存分配。當然,為這種靈活性必須要付出相應的程式碼。用堆進行儲存分配比用堆疊進行儲存儲存需要更多的時間。

3.棧:存放基本型別的變數資料和物件的引用。位於通用RAM中,但通過它的“堆疊指標”可以從處理器哪裡獲得支援。堆疊指標若向下移動,則分配新的記憶體;若向上移動,則釋放那些記憶體。這是一種快速有效的分配儲存方法,僅次於暫存器。建立程式時候,JAVA編譯器必須知道儲存在堆疊內所有資料的確切大小和生命週期,因為它必須生成 相應的程式碼,以便上下移動堆疊指標。這一約束限制了程式的靈活性。