Java中堆記憶體和棧記憶體的區別


JVM將記憶體空間分為兩部分:棧和堆。棧主要用於儲存方法執行順序和區域性變數。

棧總是按照後進先出 (LIFO) 的順序儲存塊,而堆記憶體使用動態分配來分配和釋放記憶體塊。

分配給堆的記憶體會在以下事件之一發生時釋放:

  • 程式終止
  • 記憶體釋放

相反,分配給棧的記憶體會在函式返回時釋放。以下是它們的區別。

序號關鍵點堆記憶體
1
基本
棧記憶體用於儲存生命週期很短的項,例如區域性變數、物件的引用變數
堆記憶體用於儲存物件和JRE類。
2
排序
棧總是按照後進先出 (LIFO) 的順序保留
堆記憶體是動態分配的,沒有固定的記憶體塊分配和釋放模式
3
大小
可以使用JVM引數 -XSS 增加棧記憶體大小
可以使用JVM選項 -Xms 和 -Xmx 增加或減少堆記憶體大小
4
可見性
變數僅對擁有它的執行緒可見
對所有執行緒可見
5
異常
JVM將丟擲java.lang.StackOverFlowError
JVM將丟擲java.lang.OutOfMemoryError

更新於:2019年11月18日

6000+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.