7-78 切割繩子 (5分)
阿新 • • 發佈:2020-10-21
總覽
JVM標準中的五個組成部分
- 方法區
- 堆
- 程式計數器
- 本地方法棧
- 虛擬機器棧
JDK1.7的執行時資料區
- 永久代是方法區的實現
- jdk1.6之前
字串常量池
在方法區 - jdk1.7之後
字串常量池
被移動到堆區
JDK1.8的執行時資料區
- jdk1.8去掉了永久代
- 引入了元資料區
- Jdk1.7中的
執行時常量池
移動到元資料區
元資料區
存在於直接記憶體中
為什麼移除永久代
方法區大小難以設定,容易發生記憶體溢位。永久代存放著Class相關資訊,一般資訊在編譯期就能確定,但是如果在一些動態生成的Class的應用中,如:Spring中的動態代理,大量的JSP頁面或動態生成的JSP頁面,由於方法區在一開始就要分配好,因此難以確定大小,容易發生記憶體溢位。
GC複雜效率低,方法區存放元資料和各種常量,但是這些資料被類的例項所引用,導致垃圾回收非常困難.
促進HotSpot VM和JRockit VM融合,JRockit VM沒有方法區
什麼是元空間
元空間
和永久代
類似都是對JVM規範中方法區
的實現。區別在於元空間
不在JVM虛擬機器中,因此元空間
的空間受本地記憶體制約。
元空間特點
- 每個載入器都有自己的空間
- 不會單獨回收某個類
- 元空間物件的位置是固定的
- 如果發現某個載入器不在存活,則將整個空間回收