JVM之堆Heap体系概述
生活随笔
收集整理的這篇文章主要介紹了
JVM之堆Heap体系概述
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JVM之堆Heap
目錄:
2.1 Heap 堆
2.2 新生區解析
2.3 永久帶解析
1. JVM體系結構概覽
2. JVM之堆Heap解析
2.1 Heap 堆
- 一個JVM實例只存在一個堆內存,堆內存的大小是可以調節的。類加載器讀取了類文件后,需要把類、方法、常變量放到堆內存中,保存所有引用類型的真實信息,以方便執行器執行,堆內存分為三部分:
. 堆邏輯結構圖
注:永久帶又叫Perm區,只存在于hotspot jvm中,并且只存在于jdk7和之前的版本中,jdk8中已經徹底移除了永久帶,jdk8中引入了一個新的內存區域叫metaspace。
2.2 新生區解析:
如果出現java.lang.OutOfMemoryError: Java heap space異常,說明Java虛擬機的堆內存不夠。原因有二:
(1)Java虛擬機的堆內存設置不夠,可以通過參數-Xms、-Xmx來調整。
(2)代碼中創建了大量大對象,并且長時間不能被垃圾收集器收集(存在被引用)。
2.3 永久帶解析:
2.4 方法區和堆解析:
實際而言,方法區(Method Area)和堆一樣,是各個線程共享的內存區域,它用于存儲虛擬機加載的:
類信息+普通常量+靜態常量+編譯器編譯后的代碼等等,雖然JVM規范將方法區描述為堆的一個邏輯部分,但它卻還有一個別名叫做Non-Heap(非堆),目的就是要和堆分開。
對于HotSpot虛擬機,很多開發者習慣將方法區稱之為“永久代(Parmanent Gen)” ,但嚴格本質上說兩者不同,或者說使用永久代來實現方法區而已,永久代是方法區(相當于是一個接口interface)的一個實現,jdk1.8的版本中,已經將原本放在永久代的字符串常量池移走。
補充:RUNTIME CONSTANT POOL,運行時常量池
總結
以上是生活随笔為你收集整理的JVM之堆Heap体系概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM之Java栈Java stack
- 下一篇: JVM之堆Heap参数调优入门