概念區分: 隊列Queue -- 棧Stack -- 堆Heap

一. 從數據結構角度來說:棧stack和隊列queue

Stack的特點,LIFO (Last in first out)。

Queue的特點,FIFO (First in first out)。

二. 從內存區域角度來說:棧stack和堆heap

系統一般在內存中劃分出兩種不同的內存空間,stack和heap。

1. stack是有結構的,每個區塊按照一定次序存放,可以明確知道每個區塊的大小。

heap是沒有結構的,數據可以任意存放。

因此,stack的尋址速度要快於heap。

2. 每個線程分配一個stack,每個進程分配一個heap,也就是說,stack是線程獨佔的,heap是線程共用的。

stack創建的時候,大小是確定的,數據超過這個大小,就發生stack overflow錯誤。

heap大小是不確定的,需要的話可以不斷增加。

如果stack內存沒有可用的空間存儲方法調用和局部變量,JVM會拋出java.lang.StackOverFlowError。

如果heap內存沒有可用的空間存儲生成的對象,JVM會拋出java.lang.OutOfMemoryError。

3. 使用-Xss設置內存中stack的大小,使用-Xms設置min-heap內存,使用-Xmx設置max-heap內存。

4. 數據存放的規則是:只要是局部的、佔用空間確定的數據,一般都存放在stack裏面,否則就放在heap裏面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章