JVM_JMM: MetaSpace 元空間的詳解

Meta Space是JDK1.8引入的鸽嫂,在JDK1.8使用的是方法區(qū),永久代(Permnament Generation)髓窜。
元空間存儲的是元信息扇苞,使用的是操作系統(tǒng)的本地內(nèi)存,可以是不連續(xù)的寄纵,由元空間虛擬機進行管理鳖敷。可以產(chǎn)生OutOfMemoryError


方法區(qū)產(chǎn)生內(nèi)存溢出的錯誤 需要調整內(nèi)存參數(shù),采用特殊的處理手段 初始的大小是21M,元空間虛擬機進行GC,內(nèi)存不足可以進行內(nèi)存擴展,可以擴展到 物理內(nèi)存的最大存儲大小 1. 顯示設置元空間的大小,不會自動擴展 2. 元空間存儲的數(shù)據(jù)是什么?存放一些元信息(Class元信息 動態(tài)生成字節(jié)碼編譯時不存在運行時生成 ,可以使用CGLIB程拭、JDK動態(tài)代理定踱、JSP等可以操作),不存放對象實例等數(shù)據(jù) 。


引入CGLIB:

 <!--引入cglib演示元空間的內(nèi)存溢出-->
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.2.12</version>
    </dependency>

在啟動的時候設置元空間的大小:

-XX:MaxMetaspaceSize=200m


源文件:

//-XX:MaxMetaspaceSize=10m
public class MyTest5 {
  public static void main(String[] args) {
    for (; ; ) {
      Enhancer enhancer = new Enhancer();
      enhancer.setSuperclass(MyTest5.class);
      enhancer.setUseCache(false);
      enhancer.setCallback((MethodInterceptor) (object, method, args1, proxy) ->
          proxy.invokeSuper(object, args1)
      );
      System.out.println("creating...");
      enhancer.create();
    }
  }
}

運行結果:

creating...
creating...
Exception in thread "main" net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
    at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:348)
    at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:117)
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294)
    at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)
    at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:305)
    at com.compass.spring_lecture.memory.MyTest5.main(MyTest5.java:24)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:459)
    at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:339)
    ... 6 more
Caused by: java.lang.OutOfMemoryError: Metaspace
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    ... 11 more

使用jconsole監(jiān)測:


監(jiān)測結果

顯示類的數(shù)量在持續(xù)地攀升恃鞋。

在jconsole上勾選崖媚,詳細輸出:


勾選詳細輸出

Console輸出結果:

creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12901 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12902 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12903 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12904 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12905 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12906 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12907 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_12908 from file:/C:/spring_lecture/target/classes/]
creating...

修改虛擬機參數(shù),如下:
-XX:MaxMetaspaceSize=200m -XX:+TraceClassLoading
輸出結果:

creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_7405 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_7406 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_7407 from file:/C:/spring_lecture/target/classes/]
creating...
[Loaded com.compass.spring_lecture.memory.MyTest5$$EnhancerByCGLIB$$20cc5f05_7408 from file:/C:/spring_lecture/target/classes/]

使用jvisualvm觀察結果如下:


image.png


參考文章:
Java 永久代去哪兒了

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恤浪,一起剝皮案震驚了整個濱河市畅哑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌水由,老刑警劉巖荠呐,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡直秆,警方通過查閱死者的電腦和手機濒募,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圾结,“玉大人瑰剃,你說我怎么就攤上這事◇菀埃” “怎么了晌姚?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歇竟。 經(jīng)常有香客問我挥唠,道長,這世上最難降的妖魔是什么焕议? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任宝磨,我火速辦了婚禮,結果婚禮上盅安,老公的妹妹穿的比我還像新娘唤锉。我一直安慰自己,他們只是感情好别瞭,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布窿祥。 她就那樣靜靜地躺著,像睡著了一般蝙寨。 火紅的嫁衣襯著肌膚如雪晒衩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天墙歪,我揣著相機與錄音听系,去河邊找鬼。 笑死箱亿,一個胖子當著我的面吹牛跛锌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播届惋,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼髓帽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脑豹?” 一聲冷哼從身側響起郑藏,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘩欺,沒想到半個月后必盖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拌牲,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年歌粥,在試婚紗的時候發(fā)現(xiàn)自己被綠了塌忽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡失驶,死狀恐怖土居,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嬉探,我是刑警寧澤擦耀,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涩堤,受9級特大地震影響眷蜓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜胎围,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一吁系、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痊远,春花似錦垮抗、人聲如沸氏捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽液茎。三九已至逞姿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捆等,已是汗流浹背滞造。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留栋烤,地道東北人谒养。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像明郭,于是被迫代替她去往敵國和親买窟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容