JVM PermGen –您在哪里?
這篇文章介紹了JVM內(nèi)存結(jié)構(gòu)的一些基礎(chǔ)知識,并快速窺視了PermGen,以了解自Java SE 8出現(xiàn)以來它已消失的地方。
裸基礎(chǔ)
JVM只是系統(tǒng)上運(yùn)行的另一個進(jìn)程,魔術(shù)始于java命令。 像任何OS進(jìn)程一樣,它需要內(nèi)存才能運(yùn)行。 記住– JVM本身是對硬件的軟件抽象,在其之上運(yùn)行Java程序,并擁有OS獨(dú)立性和WORA (一旦在任何地方運(yùn)行一次寫入)。
快速介紹JVM內(nèi)存結(jié)構(gòu)
根據(jù)規(guī)范,JVM分為5個虛擬內(nèi)存段。
- 堆
- 方法(非堆)
- JVM堆棧
- 本機(jī)堆棧
- PC寄存器
堆
- Java程序中分配的每個對象都需要存儲在內(nèi)存中。 堆是存儲所有實(shí)例化對象的區(qū)域。 是的–責(zé)怪新操作員填滿Java堆!
- 由所有線程共享
- JVM用盡時會拋出java.lang.OutOfMemoryError
- 使用-Xms和-Xmx JVM選項(xiàng)來調(diào)整堆大小
細(xì)分為
- 伊甸園 (年輕)–該區(qū)域中存在新對象或預(yù)期壽命短的對象,并使用-XX:NewSize和-XX:MaxNewSize參數(shù)對其進(jìn)行調(diào)節(jié)。 GC(垃圾收集器)次要空間
- 幸存者 –仍被引用的對象設(shè)法在伊甸園空間的垃圾收集中幸存下來,最終到達(dá)該區(qū)域。 通過-XX:SurvivorRatio JVM選項(xiàng)進(jìn)行調(diào)節(jié)
- 舊 (已租用)–適用于在伊甸園和幸存者空間中可以長期保存垃圾的對象(當(dāng)然,這是由于纏結(jié)的引用所致)。 一個特殊的垃圾收集器負(fù)責(zé)這個空間。 使用權(quán)空間中的對象脫空間處理由GC Major負(fù)責(zé)
方法范圍
- 也稱為非堆區(qū)域(在HotSpot JVM實(shí)現(xiàn)中)
- 它分為2個主要子空間
永久 生成 –該區(qū)域存儲來自類定義,結(jié)構(gòu),方法,字段,方法(數(shù)據(jù)和代碼)和常量的類相關(guān)數(shù)據(jù)。 可以使用-XX:PermSize和-XX:MaxPermSize進(jìn)行調(diào)節(jié)。 如果空間不足,則IT會導(dǎo)致java.lang.OutOfMemoryError:PermGen空間。
代碼 緩存 –緩存區(qū)域用于存儲編譯的代碼。 編譯后的代碼不過是本機(jī) 代碼 (特定于硬件),并且由Oracle HotSpot JVM專用的JIT (及時)編譯器處理。
JVM堆棧
- 與Java類中的方法有很多關(guān)系
- 存儲局部變量并調(diào)節(jié)方法調(diào)用,部分結(jié)果和返回值
- Java中的每個線程都有自己的堆棧(專用)副本,其他線程無法訪問。
- 使用-Xss JVM選項(xiàng)進(jìn)行了調(diào)整
本機(jī)堆棧
- 用于本機(jī)方法(非Java代碼)
- 每個線程分配
PC寄存器
- 特定于特定線程的程序計(jì)數(shù)器
- 包含要執(zhí)行的JVM指令的地址(對于本機(jī)方法,則未定義)
因此,這就是JVM內(nèi)存段基礎(chǔ)知識。 回到永久的一代。
那么PermGen在哪里?
本質(zhì)上,PermGen已被完全刪除 d, 并被另一個稱為Metaspace的存儲區(qū)域取代 。
元空間–快速事實(shí)
- 它是本機(jī)堆內(nèi)存的一部分
- 可以使用-XX:MetaspaceSize和-XX:MaxMetaspaceSize進(jìn)行調(diào)整
- 清理由XX:MetaspaceSize選項(xiàng)驅(qū)動的啟動,即達(dá)到MetaspaceSize時。
- java.lang.OutOfMemoryError:如果本機(jī)空間已用完,將接收元數(shù)據(jù)空間
- 如果存在PermGen相關(guān)的JVM選項(xiàng),即-XX:PermSize和-XX:MaxPermSize,將被忽略
這顯然只是冰山一角。 為了全面了解JVM,沒有比規(guī)范本身更好的參考了 !
您也可以探索
- Java語言規(guī)范
- Java 8有什么新功能?
干杯!
翻譯自: https://www.javacodegeeks.com/2014/09/jvm-permgen-where-art-thou.html
總結(jié)
以上是生活随笔為你收集整理的JVM PermGen –您在哪里?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java和甜蜜的科学
- 下一篇: 死机简单配置