JDK7和JDK8的JVM內存結構的區別

1、方法區變化

1.8同1.7比,最大的差別就是:元數據區取代了永久代。元空間的本質和永久代類似,都是對JVM規範中方法區的實現。

1)方法區與永久代的區別?

方法區只是JVM規範定義,而永久代爲具體的實現,元空間也是方法區在JDK1.8中的一種實現。(這個非常重要!!!)

2)爲什麼廢除永久代?

1.官方文檔:移除永久代是爲融合HotSpot JVM與 JRockit VM而做出的努力,因爲JRockit沒有永久代,不需要配置永久代

2..PermGen很難調整,PermGen中類的元數據信息在每次FullGC的時候可能被收集,但成績很難令人滿意。

而且應該爲PermGen分配多大的空間很難確定,因爲PermSize的大小依賴於很多因素,比如JVM加載的class總數,常量池的大小,方法的大小等。

並且永久代內存經常不夠用發生內存泄露。

 

2、運行時常量池變化

  • 在JDK1.7之前運行時常量池邏輯上包含字符串常量池存放在方法區, 此時hotspot虛擬機對方法區的實現爲永久代
  • 在JDK1.7 字符串常量池被從方法區拿到了堆中,這裏沒有提到運行時常量池,也就是說字符串常量池被單獨拿到堆,運行時常量池剩下的東西還在方法區,例如符號引用、類的各種信息,也就是hotspot中的永久代
  • 在JDK1.8 hotspot移除了永久代用元空間取而代之, 這時候字符串常量池還在堆, 運行時常量池剩下的東西還在方法區, 只不過方法區的實現從永久代變成了元空間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章