JVM:方法区可以GC吗?
生活随笔
收集整理的這篇文章主要介紹了
JVM:方法区可以GC吗?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
方法區和堆一樣,都是線程共享的內存區域,被用于存儲已被虛擬機加載的類信息(字段等)、即時編譯后的代碼(方法字節碼)、靜態變量和常量等數據。
根據Java虛擬機規范的規定,方法區無法滿足內存分配需求時,也會拋出OutOfMemoryError異常,雖然規范規定虛擬機可以不實現垃圾收集,因為和堆的垃圾回收效率相比,方法區的回收效率實在太低,但是此部分內存區域也是可以被回收的。
方法區的垃圾回收主要有兩種,分別是對廢棄常量的回收(常量池的回收)和對無用類的回收(類的卸載)。
當一個常量對象不再任何地方被引用的時候,則被標記為廢棄常量,這個常量可以被回收。
方法區中的類需要同時滿足以下三個條件才能被標記為無用的類:
1.Java堆中不存在該類的任何實例對象;
2.加載該類的類加載器已經被回收;
3.該類對應的java.lang.Class對象不在任何地方被引用,且無法在任何地方通過反射訪問該類的方法。
當滿足上述三個條件的類才可以被回收,但是并不是一定會被回收,需要參數進行控制,例如HotSpot虛擬機提供了-Xnoclassgc參數進行控制是否回收。
總結
以上是生活随笔為你收集整理的JVM:方法区可以GC吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu系统批量端口永久开放
- 下一篇: SIP协议和压力测试, SIP call