最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年01月16日 09:56:33   投稿:junjie  
這篇文章主要介紹了Java中堆和棧的區(qū)別詳解,所有的Java程序都運行在JVM虛擬機內部,我們這里介紹的自然是JVM(虛擬)內存中的堆和棧,需要的朋友可以參考下

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

區(qū)別

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

各司其職

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

獨有還是共享

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

異常錯誤

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

空間大小

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

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

查看默認值(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.地址已被墻。

相關文章

  • 并發(fā)編程之Java內存模型鎖的內存語義

    并發(fā)編程之Java內存模型鎖的內存語義

    這篇文章主要介紹了并發(fā)編程之Java內存模型鎖的內存語義,鎖的作用是讓臨界區(qū)互斥執(zhí)行,本文只要圍繞鎖的內存語義展開全文內容,需要的小伙伴可以參考一下
    2021-11-11
  • java開發(fā)微信公眾號支付

    java開發(fā)微信公眾號支付

    這篇文章主要給大家結合微信支付接口開發(fā)的實踐,從獲取用戶授權到各主要接口的使用方法等方面介紹微信支付的關鍵點技術,有需要的小伙伴可以參考下
    2015-08-08
  • 在Java的MyBatis框架中建立接口進行CRUD操作的方法

    在Java的MyBatis框架中建立接口進行CRUD操作的方法

    這篇文章主要介紹了在Java的MyBatis框架中建立接口進行CRUD操作的方法,CRUD是指在做計算處理時的增加(Create)、重新取得數據(Retrieve)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫,需要的朋友可以參考下
    2016-04-04
  • SpringBoot + SpringSecurity 短信驗證碼登錄功能實現

    SpringBoot + SpringSecurity 短信驗證碼登錄功能實現

    這篇文章主要介紹了SpringBoot + SpringSecurity 短信驗證碼登錄功能實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • java agent 使用及實現代碼

    java agent 使用及實現代碼

    java agent的作用可以在字節(jié)碼這個層面對類和方法進行修改的技術,能夠在不影響編譯的情況下,修改字節(jié)碼。本文主要給大家講解java agent 使用及實現代碼,感興趣的朋友一起看看吧
    2018-07-07
  • JavaBean實體類處理外鍵過程解析

    JavaBean實體類處理外鍵過程解析

    這篇文章主要介紹了JavaBean實體類處理外鍵過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 實例分析Java Class的文件結構

    實例分析Java Class的文件結構

    今天把之前在Evernote中的筆記重新整理了一下,發(fā)上來供對java class 文件結構的有興趣的同學參考一下
    2013-04-04
  • Java框架Quartz中API、Jobs和Trigger詳解

    Java框架Quartz中API、Jobs和Trigger詳解

    這篇文章主要介紹了Java框架Quartz中API、Jobs和Trigger詳解,JobDetail?對象是在將?job?加入?scheduler?時,由客戶端程序(你的程序)創(chuàng)建的,它包含?job?的各種屬性設置,以及用于存儲?job?實例狀態(tài)信息的?JobDataMap,需要的朋友可以參考下
    2023-11-11
  • Java反轉鏈表測試過程介紹

    Java反轉鏈表測試過程介紹

    這篇文章主要介紹了Java反轉鏈表測試過程,學習過數據結構的小伙伴們,對鏈表想來是并不陌生。本篇文章將為大家介紹幾種在Java語言當中,實現鏈表反轉的幾種方法,以下是具體內容
    2023-04-04
  • 老生常談Java字符串進階(必看篇)

    老生常談Java字符串進階(必看篇)

    下面小編就為大家?guī)硪黄仙U凧ava字符串進階(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

潼关县| 江口县| 炉霍县| 沛县| 绿春县| 平顶山市| 长寿区| 恩施市| 政和县| 沧源| 克什克腾旗| 临西县| 卢湾区| 霍邱县| 南溪县| 阜城县| 磐石市| 阿城市| 全南县| 东台市| 克东县| 乌拉特中旗| 边坝县| 阳江市| 武义县| 文安县| 康乐县| 定日县| 桃江县| 宁津县| 通化市| 安福县| 高雄县| 阳谷县| 开阳县| 浙江省| 平邑县| 库车县| 花莲县| 肥乡县| 望江县|