天天看點

Java工程師必知詞彙:棧

|名詞定義|

棧又稱堆棧,是作業系統在建立某個程序或者線程(在支援多線程的作業系統中是線程)為這個線程建立的存儲區域,該區域具有先進後出的特性。

位于通用RAM中,但通過它的“堆棧指針”可以從處理器那裡獲得支援。堆棧指針若向下移動,則配置設定新的記憶體;若向上移動,則釋放那些記憶體。這是一種快速有效的配置設定存儲方法,僅次于寄存器。建立程式的時候,JAVA編譯器必須知道存儲在堆棧内所有資料的确切大小和生命周期,因為它必須生成相應的代碼,以便上下移動堆棧指針。這一限制限制了程式的靈活性,故隻有某些Java資料存儲在堆棧(特别是對象引用)中,而JAVA對象不在棧中存儲。

棧記憶體:儲存的是一塊堆記憶體的位址,即:通過位址找到堆記憶體,而後找到對象内容。但是為了分析簡化起見,可以簡單地了解為:對象名稱儲存在了棧記憶體之中。

棧分區内容

1.一些基本類型的變量(int, short, long, byte, float, double, boolean, char)和對象句柄,如:在函數中定義的一些基本類型的變量和對象的引用變量。

2.方法的形參 直接在棧空間配置設定,當方法調用完成後從棧空間回收。

特點

1.每個線程包含一個棧區,棧中隻儲存基礎資料類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中

2.每個棧中的資料(原始類型和對象引用)都是私有的,其他棧不能通路。

3.棧分為3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)。

|參考資料|

[1]

https://www.jianshu.com/p/bfa5337ef59e

[2]

https://blog.csdn.net/jianesrq0724/article/details/80309690