java堆(heap)、栈(stack)和队列的区别 -凯发k8官方网
java里面stack有两种含义:
一:数据结构
stack,即java.util.stack
import java.util.stack; import java.util.iterator; import java.util.list;public class stacktest {public static void main(string[] args) {stack stack = new stack();// 将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 void iteratorthroughrandomaccess(list list) {string val = null;for (int i=0; istack的特点为lifo,即后进先出(last in, first out)。
一般与之比较的是队列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里面。
http://www.jianshu.com/p/00edd5f5f1e2
http://www.ruanyifeng.com/blog/2013/11/stack.html
http://droidyue.com/blog/2014/12/07/differences-between-stack-and-heap-in-java/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
总结
以上是凯发k8官方网为你收集整理的java堆(heap)、栈(stack)和队列的区别的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 最多包含2/k个不同字符的最长串
- 下一篇: