概念区分: 队列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里面。

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