方法區(Method Area)基礎知識


堆、棧、方法區堆關系

 

 

概述

  • 方法區與堆區一樣,是各個線程共享的內存區域

  • 方法區在JVM啟動時就會被創建,並且它的實際的物理內存空間中和Java堆區一樣都可以是不連續的

  • 方法區的大小,跟堆空間一樣,可以選擇固定大小或者可拓展

  • 方法區的大小決定了系統可以保存多少個類,如果系統定義了太多的類,導致方法區溢出,虛擬機同樣會拋出內存溢出錯誤:java.lang.OutOfMemoryError:PermGen space 或者 java.lang,OutOfMemoryError:Metaspace,比如:關閉JVM就會釋放這個區域的內存

    • 加載大量的第三方jar包

    • Tomcat部署的工程過多

    • 大量動態生成反射類

  • 在jdk7及以前,習慣上把方法區稱為永久代,jdk8開始,使用元空間取代了永久代。元空間的本質和永久代類似,都是對JVM規范中方法區的實現。不過元空間與永久代最大的區別在於:元空間不再虛擬機設置的內存中,而是使用本地內存

  • 本質上,方法區和永久代並不等價。僅是對hotSpot而言的。《java虛擬機規范》對如何實現方法區,不做統一要求。例如:BEA JRockit/IBM J9中不存在永久代的概念

  • 使用永久代,會導致Java程序更容易OOM(超過-XX:MaxPermSize上限)

 

(Java7和Java8在方法區的實現)

 

 

 

附:JVM學習目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM