激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務(wù)器之家 - 編程語言 - JAVA教程 - Java中堆和棧的區(qū)別詳解

Java中堆和棧的區(qū)別詳解

2019-12-08 21:19junjie JAVA教程

這篇文章主要介紹了Java中堆和棧的區(qū)別詳解,所有的Java程序都運(yùn)行在JVM虛擬機(jī)內(nèi)部,我們這里介紹的自然是JVM(虛擬)內(nèi)存中的堆和棧,需要的朋友可以參考下

當(dāng)一個(gè)人開始學(xué)習(xí)Java或者其他編程語言的時(shí)候,會接觸到,由于一開始沒有明確清晰的說明解釋,很多人會產(chǎn)生很多疑問,什么是堆,什么是棧,堆和棧有什么區(qū)別?更糟糕的是,Java中存在棧這樣一個(gè)后進(jìn)先出(Last In First Out)的順序的數(shù)據(jù)結(jié)構(gòu),這就是java.util.Stack。這種情況下,不免讓很多人更加費(fèi)解前面的問題。事實(shí)上,堆和棧都是內(nèi)存中的一部分,有著不同的作用,而且一個(gè)程序需要在這片區(qū)域上分配內(nèi)存。眾所周知,所有的Java程序都運(yùn)行在JVM虛擬機(jī)內(nèi)部,我們這里介紹的自然是JVM(虛擬)內(nèi)存中的堆和棧。

區(qū)別

java中堆和棧的區(qū)別自然是面試中的常見問題,下面幾點(diǎn)就是其具體的區(qū)別

各司其職

最主要的區(qū)別就是棧內(nèi)存用來存儲局部變量和方法調(diào)用。
而堆內(nèi)存用來存儲Java中的對象。無論是成員變量,局部變量,還是類變量,它們指向的對象都存儲在堆內(nèi)存中。

獨(dú)有還是共享

棧內(nèi)存歸屬于單個(gè)線程,每個(gè)線程都會有一個(gè)棧內(nèi)存,其存儲的變量只能在其所屬線程中可見,即棧內(nèi)存可以理解成線程的私有內(nèi)存。
而堆內(nèi)存中的對象對所有線程可見。堆內(nèi)存中的對象可以被所有線程訪問。

異常錯(cuò)誤

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

空間大小

棧的內(nèi)存要遠(yuǎn)遠(yuǎn)小于堆內(nèi)存,如果你使用遞歸的話,那么你的棧很快就會充滿。如果遞歸沒有及時(shí)跳出,很可能發(fā)生StackOverFlowError問題。
你可以通過-Xss選項(xiàng)設(shè)置棧內(nèi)存的大小。-Xms選項(xiàng)可以設(shè)置堆的開始時(shí)的大小,-Xmx選項(xiàng)可以設(shè)置堆的最大值。

這就是Java中堆和棧的區(qū)別。理解好這個(gè)問題的話,可以對你解決開發(fā)中的問題,分析堆內(nèi)存和棧內(nèi)存使用,甚至性能調(diào)優(yōu)都有幫助。

查看默認(rèn)值(Updated)

查看堆的默認(rèn)值,使用下面的代碼,其中InitialHeapSize為最開始的堆的大小,MaxHeapSize為堆的最大值。

復(fù)制代碼代碼如下:

13:17 $ java -XX:+PrintFlagsFinal -version | grep HeapSize
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 134217728                           {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 2147483648                          {product}
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)


查看棧的默認(rèn)值,其中ThreadStackSize為棧內(nèi)存的大小。

 

 

復(fù)制代碼代碼如下:

13:21 $ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
     intx CompilerThreadStackSize                   = 0                                   {pd product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

 

譯文信息

原汁原味的英文原文:http://javarevisited.blogspot.com.au/2013/01/difference-between-stack-and-heap-java.html.

譯文在原文基礎(chǔ)上進(jìn)行了修改,整理,刪減。如有興趣可以訪問原文。P.S.地址已被墻。

延伸 · 閱讀

精彩推薦
545
主站蜘蛛池模板: 最新一区二区三区 | 久久精品人人做人人爽 | 国产精品久久久久久久久久久久久久久久 | 黄污网址 | 黄色一级毛片免费看 | 一级做a爱片毛片免费 | 亚洲第一页夜 | 香蕉久草在线 | 国产精品成人久久久久a级 av电影在线免费 | 亚洲视频综合网 | 操碰 | 一级成人欧美一区在线观看 | 欧美大逼网 | 最新福利在线 | 亚洲网站一区 | 日本a∨精品中文字幕在线 被啪羞羞视频在线观看 | 黄色免费在线视频网站 | 青草久久网| 黄网站色成年大片免费高 | 激情小说激情电影 | 国产精品视频在线免费观看 | 草草视频免费观看 | 天天黄色片| 色视频在线观看 | 日韩剧情片 | 免费激情网站 | 国产精品一区二区三区在线 | 性欧美极品xxxx欧美一区二区 | 久久国产亚洲精品 | 毛片韩国| 网站一区| av懂色| 日韩视频1| 国产精品成人一区 | 亚洲第九十九页 | 国产激情视频在线 | 黄色一级电影网 | 久久99亚洲精品久久99果 | 永久在线观看电影 | 老a影视网站在线观看免费 国产精品久久久久久久久久尿 | 精品一区二区三区日本 |