zoukankan      html  css  js  c++  java
  • JVM的方法区和永久带是什么关系

    原文这这里:https://www.imooc.com/article/47149

    群里面有小伙伴问到这个问题,说在网上看了很多文章,但是还是没弄明白这俩是啥关系,下面我们就来详细的解释一下:

    什么是方法区?

    方法区(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中移除了永久带以后的内存结构:

    https://img2.mukewang.com/5b59198f000159c905450385.jpg

    结论:

    (1)方法区是规范层面的东西,规定了这一个区域要存放哪些东西

    (2)永久带或者是metaspace是对方法区的不同实现,是实现层面的东西。

  • 相关阅读:
    Median Value
    237. Delete Node in a Linked List
    206. Reverse Linked List
    160. Intersection of Two Linked Lists
    83. Remove Duplicates from Sorted List
    21. Merge Two Sorted Lists
    477. Total Hamming Distance
    421. Maximum XOR of Two Numbers in an Array
    397. Integer Replacement
    318. Maximum Product of Word Lengths
  • 原文地址:https://www.cnblogs.com/AnXinliang/p/9956927.html
Copyright © 2011-2022 走看看