方法区

方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储常量池、域、方法数据、方法体、构造函数、类中专用方法、实例初始化、接口初始化等数据,其大小可以通过参数来设置。通常方法区存储区域的大小在程序启动后就是固定的了,JVM运行一段时间后,需要加载的类通常都已经加载到JVM中了。

《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用,并没有规定如何去实现它。

同时,在JDK1.7开始,原本规定在方法区中的常量池移了出来,在Java堆中中开辟了一块区域存放。

永久代

方法区和永久代的关系很像Java中接口和类的关系,类实现了接口,而永久代就是HotSpot虚拟机对虚拟机规范中方法区的一种实现方式,简而言之,方法区是Java虚拟机规范,而永久代是一种实现。

在Java虚拟机规范中,方法区在虚拟机启动的时候创建,虽然方法区是堆的逻辑组成部分,但是简单的虚拟机实现可以选择不在方法区实现垃圾回收与压缩。这个版本的虚拟机规范也不限定实现方法区的内存位置和编译代码的管理策略。所以不同的JVM厂商,针对自己的JVM可能有不同的方法区实现方式。

在HotSpot中,设计者将方法区纳入GC分代收集。HotSpot虚拟机堆内存被分为新生代和老年代,对堆内存进行分代管理,所以HotSpot虚拟机使用者更愿意将方法区称为老年代。

元空间Metaspace

Java8以前,HotSpots取消了永久代,但不代表方法区这个规范不存在了,取而代之的技术叫元空间。 因为以前的永久代是在JVM分配的内存中,本身是设置好的固定大小上限,无法改变,所以溢出的可能性比较大,Java8开始把这一部分移到了本机内存,也就是元空间的大小只受本机内存的限制,虽然元空间仍旧可能溢出,但是比原来出现的几率会更小。

你可以使用-XX:MaxMetaspaceSize标志设置最大元空间大小,默认值为 unlimited,这意味着它只受系统内存的限制。-XX:MetaspaceSize调整标志定义元空间的初始大小如果未指定此标志,则 Metaspace 将根据运行时的应用程序需求动态地重新调整大小。

java永久区_方法区、永久代和元空间Metaspace相关推荐

  1. java永久区_Java方法区和永久代

    目前有三大Java虚拟机:HotSpot,oracle JRockit,IBM J9. JRockit是oracle发明的,用于其WebLogic服务器,IBM JVM是IBM发明的用于其Websph ...

  2. JVM(5)_方法区和大厂面试题

    文章目录 1. 堆.栈.方法区的交互关系 2. 方法区的理解 3.设置方法区大小与OOM 3.1 方法区大小 3.2 方法区OOM 4.方法区的内部结构 4.1 方法区中存储的信息 4.2 运行时常量 ...

  3. java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)

    本文转载 一.JVM 内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是 ...

  4. 常量池在堆还是方法区_第九章_方法区

    方法区 栈.堆.方法区的交互关系 这次所讲述的是运行时数据区的最后一个部分--方法区 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理 ...

  5. java堆 permgen_Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...

  6. java调用怎么调用方法区_Java中的方法调用有多昂贵

    java调用怎么调用方法区 我们都去过那儿. 在查看设计不良的代码的同时,听听作者对人们永远不应该牺牲性能而不是设计的解释. 而且,您不能说服作者摆脱其500行方法,因为链接方法调用会破坏性能. 好吧 ...

  7. JVM之运行时数据区(方法区)

    文章目录 1. 堆.栈.方法区的交互关系 2. 方法区的理解 3.设置方法区大小与OOM 方法区OOM 4.方法区的内部结构 类型信息 域信息(成员变量) 方法信息 non-final的类变量 运行时 ...

  8. Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...

  9. 永久代内存java_Java8内存模型—永久代(PermGen)和元空间(Metaspace)

    一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...

  10. JVM原理系列--元空间(MetaSpace)与永久代(PermGen)的区别

    原文网址:JVM原理系列--元空间(MetaSpace)与永久代(PermGen)的区别_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍JVM中元空间(MetaSpace)与永久代(PermG ...

最新文章

  1. docker常用命令行集锦
  2. android 触摸 卡顿,Android CoordinatorLayout(五) 严重的卡顿BUG
  3. gitlab重置root的密码
  4. C#中struct和class的区别详解
  5. 米斯特白帽培训讲义(v2)漏洞篇 提权
  6. 可实现“一台主机多人同用”的 Windows MultiPoint Server 2011 中文正式版
  7. Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)
  8. 博文视点Open Party上海站 即将精彩呈现
  9. 【元胞自动机】基于matlab元胞自动机单边教室疏散【含Matlab源码 1207期】
  10. java 打印制表符_开发简单的Java应用
  11. struts2面试题大全含答案
  12. SiamFC论文解读及代码实现
  13. rpg人物制作软件_RPG Maker系列最新版本《RPG制作大师MZ》上架Steam
  14. “杜拉拉升职记”电影看后感
  15. 某学校同学聚会三句半
  16. 那年花一个钟用PS改证件照的背景色,今天用Excel我只花了60秒!
  17. 网络安全课程设计Java实现DES加密算法(可视化界面)代码+设计文档
  18. pikachu——验证码绕过(on client)python脚本解法
  19. 【FME EXCEL】FME玩转EXCEL小记——不定期更新
  20. 不小心格式化了硬盘怎么恢复?

热门文章

  1. 论文解析:Neural Graph Collaborative Filtering
  2. jQuery常用功能大全
  3. QQ邮箱代收Gmail邮箱
  4. vs2013编译 解决 error c1083 无法打开文件 'winsock2.h' 等问题记录
  5. Wed Jul 22 00:00:00 CST 2020 java转成指定日期格式的字符串
  6. 《科学》最新研究:给“薛定谔猫”第二个盒子会发生什么?
  7. 百宝云Web网络验证系统防破解设置
  8. 一文带你搞懂Python中的文件操作
  9. 泛微oa系统什么框架_泛微OA系统怎么样?与其他OA相比呢?
  10. python如何实现飞机上下移动_飞机大战正确方法,利用Python开发一个全自动版来实现自动打飞机...