日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時間:2025/1/21 java 107 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java堆(heap)、栈(stack)和队列的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?Java里面Stack有兩種含義:

一:數(shù)據(jù)結(jié)構(gòu)

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; i<list.size(); i++) {val = (String)list.get(i);System.out.print(val+" ");}System.out.println();}/*** 通過迭代器遍歷Stack*/public static void iteratorThroughIterator(List list) {String val = null;for(Iterator iter = list.iterator(); iter.hasNext(); ) {val = (String)iter.next();System.out.print(val+" ");}System.out.println();}}

Stack的特點(diǎn)為LIFO,即后進(jìn)先出(Last in, first out)。

一般與之比較的是隊(duì)列Queue,隊(duì)列是兩個口,先進(jìn)先出。

二:內(nèi)存區(qū)域

系統(tǒng)一般在內(nèi)存中劃分出兩種不同的內(nèi)存空間,一種是Stack(棧),一種是heap(堆)

它們的主要區(qū)別是:

stack是有結(jié)構(gòu)的,每個區(qū)塊按照一定次序存放,可以明確知道每個區(qū)塊的大小;heap是沒有結(jié)構(gòu)的,數(shù)據(jù)可以任意存放。因此,stack的尋址速度要快于heap。

每個線程分配一個stack,每個進(jìn)程分配一個heap,也就是說,stack是線程獨(dú)占的,heap是線程共用的。

stack創(chuàng)建的時候,大小是確定的,數(shù)據(jù)超過這個大小,就發(fā)生stack overflow錯誤,而heap的大小是不確定的,需要的話可以不斷增加。

如果棧內(nèi)存沒有可用的空間存儲方法調(diào)用和局部變量,JVM會拋出java.lang.StackOverFlowError。
而如果是堆內(nèi)存沒有可用的空間存儲生成的對象,JVM會拋出java.lang.OutOfMemoryError。

使用-Xss設(shè)置內(nèi)存中棧的大小,使用-Xms設(shè)置最小堆內(nèi)存,使用-Xmx設(shè)置最大堆內(nèi)存。

數(shù)據(jù)存放的規(guī)則是:只要是局部的、占用空間確定的數(shù)據(jù),一般都存放在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

總結(jié)

以上是生活随笔為你收集整理的Java堆(heap)、栈(stack)和队列的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。