亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何區別Java的堆和棧?

發布時間:2020-05-26 11:07:36 來源:億速云 閱讀:189 作者:Leah 欄目:編程語言

  如何區別Java的堆和棧?相信大部分人都還沒學會這個技能,為了讓大家學會,給大家總結了以下內容,話不多說,一起往下看吧。

如何區別Java的堆和棧?

  從優勢及不足進行分析

  堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。缺點是由于要在運行時動態分配內存,存取速度較慢。

  棧的優勢是,存取速度比堆要快,僅次于直接位于CPU中的寄存器。缺點是存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。另外,棧數據可以共享。

  從存儲對象和歸屬分析

  堆可以理解為內存中一片分散的區域,堆內存用來存儲Java中的對象。無論是成員變量,局部變量,還是類變量,它們指向的對象都存儲在堆內存中。堆內存中的對象對所有線程可見,堆內存中的對象可以被所有線程訪問。

  棧可以理解為內存中一片連續的區域。棧內存歸屬于單個線程,每個線程都會有一個棧內存,其存儲的變量只能在其所屬線程中可見,即棧內存可以理解成線程的私有內存。

  從異常錯誤和空間大小分析

  想要進一步理解堆和棧的關系,我們需要了解JVM和垃圾回收機制。通常來說,new創建的實例化對象及數組,是存放在堆內存中的,用完之后靠垃圾回收機制不定期自動消除。基本數據類型、局部變量都是存放在棧內存中的,用完就消失。

  如果是堆內存沒有可用的空間存儲生成的對象,JVM會拋出java.lang.OutOfMemoryError。如果棧內存沒有可用的空間存儲方法調用和局部變量,JVM會拋出java.lang.StackOverFlowError。棧的內存要遠遠小于堆內存,如果你使用遞歸的話,那么你的棧很快就會充滿。如果遞歸沒有及時跳出,很可能發生StackOverFlowError問題。

  綜合來看,堆和棧都是內存中的一部分,有著不同的作用,而且一個程序需要在這片區域上分配內存。如果你想成為一個好的Java工程師,一定要熟練掌握并明確區分堆與棧。

  以上就是區別Java的堆和棧的方法了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新河县| 泰兴市| 项城市| 宁河县| 松潘县| 常德市| 莱西市| 深圳市| 阳曲县| 凌云县| 尖扎县| 咸宁市| 景泰县| 鸡西市| 县级市| 永清县| 金溪县| 龙川县| 天峻县| 通河县| 徐闻县| 宁明县| 孝昌县| 武陟县| 合江县| 衡东县| 南澳县| 沛县| 扎鲁特旗| 杭锦旗| 洛南县| 安顺市| 鸡东县| 玛纳斯县| 赫章县| 云南省| 百色市| 依安县| 新和县| 长垣县| 周至县|