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是对方法区的不同实现,是实现层面的东西。

    (3)打个比方,这个问题就类似于在问:汽车和奥迪A4L有啥区别?

  • 相关阅读:
    关于ceph的一些问题及解决
    Kubernetes 安装Rook ceph 1.5
    Flex布局语法教程
    MediaWiki安装随记
    Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。
    windows的php7安装memcache扩展
    MediaWiki投放广告代码的几种办法
    mediawiki 常见配置功能
    mysql 添加用户 删除用户 赋权
    apache24配置php7
  • 原文地址:https://www.cnblogs.com/brithToSpring/p/13594996.html
Copyright © 2011-2022 走看看