永久区(PGS)

JVM内存结构分为 堆,方法区,栈,程序计数器,本地方法区。 这些都是逻辑内存区域划分,实际上不同的
虚拟机的实现方式是不同的,我们常用的也是普及率最高 的虚拟机HotSpot,只有他有永久代这个概念。
  • PGS算是方法区实现,他和堆的内存是连续的一个整体,但是逻辑上是隔离的,所以在垃圾回收的时候,常常说新生代,老年代时,也会说到永久代。
  • PGS主要存储,对象的Class实例和Meta信息,在运行时,不会对PGS进行垃圾回收。
  • 当第一次使用类的静态方法(包括构造方法)时,JVM会将对应的.class文件加载到内存,
    并按照Class对象的方式存储到PGS区域,如果你的应用中有很多CLASS的话,就很可能出现
    java.lang.OutOfMemoryError: PermGen space 错误,
  • 如果你大量的第三方jar, 同时加载的类的数量过多其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
  • 在JDK1.6及之前 方法区还包含常量池的概念 1.7之后就将常量池移到堆区了
  • 在1.8之后移除了永久区的说法,取而代之的是元空间

为什么会移除永久代

表面上看是为了避免OOM异常。因为通常使用PermSize和MaxPermSize设置永久代的大小就决定了永久代的上限,但是不是总能知道应该设置为多大合适, 如果使用默认值很容易遇到OOM错误。
当使用元空间时,可以加载多少类的元数据就不再由MaxPermSize控制, 而由系统的实际可用空间来控制。
更深层的原因还是要合并HotSpot和JRockit的代码,使用了元空间取代永久代,不用担心运行性能问题了,在覆盖到的测试中, 取代后程序启动和运行速度降低不超过1%,但是这点性能损失换来了更大的安全保障。

元空间(metaspace)

  • 元空间在取代永久代之后,唯一的不同之处在于,元空间所占用的内存为本地内存,不在是JVM申请的内存,所以只要机器还有内存,元空间就可以一直申请使用。由下面的参数可以看出,并没有设置元空间最大内存的参数,就是可以充分利用机器的内存。

元空间的参数配置

  • -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
  • -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。  除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
  • -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
  • -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集。

永久代,方法区 和 元空间之间的关系相关推荐

  1. JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系

    文章目录 Pre 示例demo 总体关系 代码示例论证 反汇编 Pre JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器 中我们探讨了线程栈中的内部结构 ,大家 ...

  2. 永久代退出舞台,元空间腾空出世

    文章目录 一.前言 二.元空间由来和本质 2.1 元空间的诞生与永久代的消失 2.2 从永久代到元空间 2.2.1 JDK8之前,永生代在哪里? 2.2.2 JDK8之后,永生代废弃,元空间诞生 2. ...

  3. Davids原理探究:JDK8将永久代(PermGen)替换为元空间(MetaSpace)的原因

    文章目录 JDK8将永久代(PermGen)替换为元空间(MetaSpace)的原因 什么是方法区 永久代产生的原因 将永久代替换为源空间的原因 JDK8将永久代(PermGen)替换为元空间(Met ...

  4. 深入理解Java虚拟机(三)之详拆运行时数据区的各个结构----方法区(元空间)

    目录 栈.堆.方法区的交互关系 方法区的理解 设置方法区的大小和OOM 方法区的内部结构 存放内容 类型信息 域信息 方法(Method)信息. 静态变量 常量(static final) 运行时常量 ...

  5. Java栈内存、堆内存、方法区对对象和引用的关系

    问题:Java栈内存.堆内存.方法区对对象和引用的关系 答案: 1.单个对象 如图所示: (1)首先类加载器加载要运行的类,首先将main方法加载进方法区,并进栈内存,顺序执行代码,创建对象,将对象的 ...

  6. oracle数据库_实例_用户_表空间之间的关系

    oracle数据库_实例_用户_表空间之间的关系 基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制 ...

  7. 我们必须真正理顺区块链与元宇宙之间的关系

    文/孟永辉 元宇宙的火爆并非偶然.无论是在投资界,还是在行业界,我们都看到了元宇宙的身影."元宇宙+",俨然已经成为一个全新的风口.由于与元宇宙之间的天然联系,于是,很多人开始将元 ...

  8. 欧氏空间距离和内积_欧式空间、内积空间和赋范空间之间的关系

    满意答案 stalbn 2014.05.18 采纳率:44%    等级:12 已帮助:6557人 (1)赋范向量空间是具有"长度"概念的向量空间.是通常的欧几里德空间 Rn 的推 ...

  9. SQL那些事儿(八)--oracle用户、表、表空间之间的关系

    在oracle中,开始我一直以为表空间就类似SQLsever和mysql中的数据库概念,而且延续了好长时间,并在此基础上进行延伸理解,走了好多弯路. 今天才搞明白表空间是个逻辑概念,跟数据库完全不是一 ...

  10. JVM之 方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别

    文章目录 0.前言(JVM 运行时区域) 1.PermGen(永久代) 2.Metaspace(元空间) 3.JDK6 .JDK7.JDK8 内存溢出的示例 4.元空间与本地内存 5.总结 0.前言( ...

最新文章

  1. 怎样使一个Android应用不被杀死?(整理)
  2. 常见数字IC设计、FPGA工程师面试题
  3. 使用UEFI Shell引导U盘启动
  4. 漫画算法:如何判断链表有环
  5. 成都电讯学院研发的计算机,成都电讯工程学院
  6. 解决parseSdkContent failed java.lang.NullPointerException错误
  7. (49)Verilog HDL SPI接收设计
  8. 发现凌晨醒来,可以写出平时写不出来的代码
  9. 串口速度,RS232与MAX232的区别
  10. mysqldump只导出数据或者只导出表结构
  11. C#随机不重复给数组赋值1-100并排序
  12. Dubbo + Zookeeper 简单搭建
  13. 无线路由器实现局域网内中继功能
  14. Python3.6实现12306火车票自动抢票(附源码)
  15. ps cs6调油画效果教程
  16. Win系统 - 该扩展程序并未列在Chrome应用商店中怎么样办?
  17. 实验指南:BGP路由汇聚(上)
  18. Centos系统找出并杀死僵尸进程
  19. 23三种设计模式之代理模式
  20. python 电子词典的实现

热门文章

  1. python海龟绘图颜色_海龟绘图
  2. 基于node连接广工大服务器获取信息
  3. JS 把 Wed Jul 15 2015 00:00:00 GMT+0800 转换成2015-07-15
  4. 如何添加二级域名(图文超级详细)
  5. 计算机协会副会职责,计算机协会规章制度解答.doc
  6. Mac怎么玩Windows游戏
  7. idea remote debug
  8. Aurora Engine 游戏引擎入门 21(统一渲染架构 FIXED)
  9. OCT-视网膜分层处理
  10. 《Adobe Photoshop CS4中文版经典教程》目录—导读