元空間記憶體溢位
jvm的方法區是被所有執行緒共享的,是在虛擬機器啟動時建立。
方法區存放每個類的構造資訊,比如型別資訊(比如完全限定名、父類完全限定名、訪問修飾符)、執行時常量池、靜態變數、即時編譯器jit編譯後的**快取、字段資訊、構造方法**、方法**、載入當前類的類的載入器等
jvm官方規範對方法區的定義比較模糊,邏輯上方法區是堆的一部分,規範沒有強制指定方法區的位置,也沒有規定方法區是在建立時開闢固定大小的空間,還是通過根據需要進行擴充套件,或者在不需要的時候進行壓縮。
方法區是一種規範,hotspot實現為永久代【jdk1.8開始】和元空間【jdk1.8之前】
靜態成員變數分配在方法區中,而普通成員變數是會隨著物件一起分配到堆記憶體中,因為靜態成員變數是類級別的,不屬於具體某個物件,而普通成員變數屬於具體的物件,隨著物件儲存在堆空間中。
public
class
demo
}
元空間記憶體溢位一般是因為載入的類過多
預設情況下元空間沒有設定上限的,但可以在啟動時指定元空間的大小:
JVM(六)記憶體區域方法區
是什麼?1.是各個執行緒共享的記憶體區域,它用於儲存已被虛擬機器載入的類資訊 常量 靜態變數 即時編譯器編譯後的 等資料 2.什麼是類資訊 類版本號 方法 介面 為什麼?1.記憶體中存放類資訊 靜態變數等資料,屬於執行緒共享的一塊區域 2.hotspot使用永久代來實現方法區 3.jrockit i...
JVM執行時資料區 方法區
在hotspot jvm實現當中,在jdk8以前,方法區的實現為permgen,即永久代,主要存放類的資訊,方法的資訊,常量池,靜態變數,符號解析 而jdk8 則去除了permgen,使用元空間metaspace代替,元空間使用的是本地記憶體,理論上可以無限大,最大大小指受限於本地記憶體大小,所以不...
JVM記憶體區PermGen Space
permgen space的全稱是permanent generation space 是指記憶體的永久儲存區域,這塊記憶體主要是被jvm存放class和meta資訊的,class在被loader時就會被放到permgen space中 它和存放類例項 instance 的heap區域不同,gc g...