群裡面有小夥伴問到這個問題,說在網上看了很多文章,但是還是沒弄明白這倆是啥關係,下面我們就來詳細的解釋一下:
什麼是方法區?
方法區(method area)是jvm規範裡面的執行時資料區的乙個組成部分,jvm規範中的執行時資料區還包含了:pc暫存器、虛擬機器棧、堆、方法區、執行時常量池、本地方法棧。
方法區儲存東西?
主要用來儲存class、執行時常量池、字段、方法、**、jit**等。
注意:(1)執行時資料區跟記憶體不是乙個概念。
(2)方法區是執行時資料區的一部分
(3)方法區是jvm規範中的一部分,並不是實際的實現,切忌將規範跟實現混為一談。
我們再來看下永久帶(perm區):
永久帶又叫perm區,只存在於hotspot jvm中,並且只存在於jdk7和之前的版本中,jdk8中已經徹底移除了永久帶,jdk8中引入了乙個新的記憶體區域叫metaspace。
(1)並不是所有的jvm中都有永久帶,ibm的j9,oracle的jrocket都沒有永久帶。
(2)永久帶是實現層面的東西。
(3)永久帶裡面存的東西基本上就是方法區規定的那些東西。
因此,我們可以說,永久帶是方法區的一種實現,當然,在hotspot jdk8中metaspace可以看成是方法區的一種實現。
下面我們來看下hotspot jdk8中移除了永久帶以後的記憶體結構:
結論:(1)方法區是規範層面的東西,規定了這乙個區域要存放哪些東西
(2)永久帶或者是metaspace是對方法區的不同實現,是實現層面的東西。
JVM的方法區和永久帶的關係
原文這這裡 什麼是方法區?方法區 method area 是jvm規範裡面的執行時資料區的乙個組成部分,jvm規範中的執行時資料區還包含了 pc暫存器 虛擬機器棧 堆 方法區 執行時常量池 本地方法棧。方法區儲存東西?主要用來儲存class 執行時常量池 字段 方法 jit 等。注意 1 執行時資料...
JVM的方法區和永久帶的區別和關係
原文這這裡 什麼是方法區?方法區 method area 是jvm規範裡面的執行時資料區的乙個組成部分,jvm規範中的執行時資料區還包含了 pc暫存器 虛擬機器棧 堆 方法區 執行時常量池 本地方法棧。方法區儲存東西?主要用來儲存class 執行時常量池 字段 方法 jit 等。注意 1 執行時資料...
永久代,方法區 和 元空間之間的關係
jvm記憶體結構分為 堆,方法區,棧,程式計數器,本地方法區。這些都是邏輯記憶體區域劃分,實際上不同的 虛擬機器的實現方式是不同的,我們常用的也是普及率最高 的虛擬機器hotspot,只有他有永久代這個概念。為什麼會移除永久代 表面上看是為了避免oom異常。因為通常使用permsize和maxper...