方法區(qū) & 永久區(qū)
方法區(qū)是jvm規(guī)范里要求的趟庄,永久區(qū)是Hotspot虛擬機(jī)對(duì)方法區(qū)的具體實(shí)現(xiàn)显拳,前者是規(guī)范棚愤,后者是實(shí)現(xiàn)方式。jdk1.8作了改變杂数。jdk1.8中永久代被徹底移除宛畦,取而代之的是另一塊與堆不相連的本地內(nèi)存-元空間
轉(zhuǎn)載自知乎內(nèi)容
根據(jù)R大的評(píng)論,修改了一些錯(cuò)誤耍休∪杏溃————————————————————————————————————————
如果那8G指的是-Xmx 8G,那么256M不在其中羊精。但是永久代/方法區(qū)也屬于GC Heap的一部分。
另外囚玫,方法區(qū)(method area)只是JVM規(guī)范中定義的一個(gè)概念喧锦,用于存儲(chǔ)類信息、常量池抓督、靜態(tài)變量燃少、JIT編譯后的代碼等數(shù)據(jù),具體放在哪里铃在,不同的實(shí)現(xiàn)可以放在不同的地方阵具。而永久代是Hotspot虛擬機(jī)特有的概念,是方法區(qū)的一種實(shí)現(xiàn)定铜,別的JVM都沒(méi)有這個(gè)東西阳液。
在Java 6中,方法區(qū)中包含的數(shù)據(jù)揣炕,除了JIT編譯生成的代碼存放在native memory的CodeCache區(qū)域帘皿,其他都存放在永久代;在Java 7中畸陡,Symbol的存儲(chǔ)從PermGen移動(dòng)到了native memory鹰溜,并且把靜態(tài)變量從instanceKlass末尾(位于PermGen內(nèi))移動(dòng)到了java.lang.Class對(duì)象的末尾(位于普通Java heap內(nèi))虽填;在Java 8中,永久代被徹底移除曹动,取而代之的是另一塊與堆不相連的本地內(nèi)存——元空間(Metaspace),?XX:MaxPermSize 參數(shù)失去了意義斋日,取而代之的是-XX:MaxMetaspaceSize。