stack heap java_Java堆(heap)、栈(stack)和队列的区别

Java里面Stack有两种含义:

一:数据结构

Stack,即java.util.Stack

importjava.util.Stack;importjava.util.Iterator;importjava.util.List;public classStackTest {public static voidmain(String[] args) {

Stack stack= newStack();//将1,2,3,4,5添加到栈中

for(int i=1; i<6; i++) {

stack.push(String.valueOf(i));

}//遍历并打印出该栈

iteratorThroughRandomAccess(stack) ;//查找“2”在栈中的位置,并输出

int pos = stack.search("2");

System.out.println("the postion of 2 is:"+pos);//pup栈顶元素之后,遍历栈

stack.pop();

iteratorThroughRandomAccess(stack) ;//peek栈顶元素之后,遍历栈

String val =(String)stack.peek();

System.out.println("peek:"+val);

iteratorThroughRandomAccess(stack) ;//通过Iterator去遍历Stack

iteratorThroughIterator(stack) ;

}/*** 通过快速访问遍历Stack*/

public static voiditeratorThroughRandomAccess(List list) {

String val= null;for (int i=0; i

val=(String)list.get(i);

System.out.print(val+" ");

}

System.out.println();

}/*** 通过迭代器遍历Stack*/

public static voiditeratorThroughIterator(List list) {

String val= null;for(Iterator iter =list.iterator(); iter.hasNext(); ) {

val=(String)iter.next();

System.out.print(val+" ");

}

System.out.println();

}

}

Stack的特点为LIFO,即后进先出(Last in, first out)。

525e5941490cc051b740fdff6849497e.png

一般与之比较的是队列Queue,队列是两个口,先进先出。

二:内存区域

系统一般在内存中划分出两种不同的内存空间,一种是Stack(栈),一种是heap(堆)

它们的主要区别是:

stack是有结构的,每个区块按照一定次序存放,可以明确知道每个区块的大小;heap是没有结构的,数据可以任意存放。因此,stack的寻址速度要快于heap。

每个线程分配一个stack,每个进程分配一个heap,也就是说,stack是线程独占的,heap是线程共用的。

stack创建的时候,大小是确定的,数据超过这个大小,就发生stack overflow错误,而heap的大小是不确定的,需要的话可以不断增加。

如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError。

而如果是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。

使用-Xss设置内存中栈的大小,使用-Xms设置最小堆内存,使用-Xmx设置最大堆内存。

数据存放的规则是:只要是局部的、占用空间确定的数据,一般都存放在stack里面,否则就放在heap里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值