一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - Java中堆和棧的區別詳解

Java中堆和棧的區別詳解

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

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

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

區別

java中堆和棧的區別自然是面試中的常見問題,下面幾點就是其具體的區別

各司其職

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

獨有還是共享

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

異常錯誤

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

空間大小

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

這就是Java中堆和棧的區別。理解好這個問題的話,可以對你解決開發中的問題,分析堆內存和棧內存使用,甚至性能調優都有幫助。

查看默認值(Updated)

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

復制代碼代碼如下:

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)


查看棧的默認值,其中ThreadStackSize為棧內存的大小。

 

 

復制代碼代碼如下:

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.

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看一区二区 | 99久久免费精品视频 | 美女露全身永久免费网站 | 黑帮大佬与我的365天2标清中文 | 娇妻被朋友征服中文字幕 | 久久视频在线视频观看精品15 | 午夜久久精品 | 国产成人综合一区精品 | 亚洲+国产+图片 | 四虎4hu永久免费 | 亚洲图片二区 | 幻女free性俄罗斯第一次摘花 | 免费人成在线观看69式小视频 | 成年人免费在线看的惊悚动作片 | 亚洲午夜小视频 | 非洲一级毛片又粗又长aaaa | 亚洲精品国产在线网站 | 国产区一二三四区2021 | 冰山美人调教耻辱h | 日韩大片免费观看 | 国产成人精品日本亚洲网站 | 蜜桃破解版免费看nba | 九九99热久久精品在线6 | x8x8在线观看 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 欧美大陆日韩一区二区三区 | 免费看国产精品久久久久 | 亚洲精品中文字幕久久久久久 | 日韩精品一二三区 | chinese国产人妖videos | 成人福利视频网址 | 欧美伊人久久久久久久久影院 | 国产欧美国产综合第一区 | 亚洲天堂免费看 | 第一次破女视频国产一级 | 国产片自拍| 久久久精品国产免费A片胖妇女 | 逼逼毛片| 先锋资源av | 色综合色综合 | 欧美日韩国产精品自在自线 |