关于jvm:JVM内存模型

27次阅读

共计 515 个字符,预计需要花费 2 分钟才能阅读完成。

总览

JVM 规范中的五个组成部分

  • 办法区
  • 程序计数器
  • 本地办法栈
  • 虚拟机栈

JDK1.7 的运行时数据区

  • 永恒代是办法区的实现
  • jdk1.6 之前 字符串常量池 在办法区
  • jdk1.7 之后 字符串常量池 被挪动到堆区

JDK1.8 的运行时数据区

  • jdk1.8 去掉了永恒代
  • 引入了元数据区
  • Jdk1.7 中的 运行时常量池 挪动到 元数据区
  • 元数据区 存在于间接内存中

为什么移除永恒代

办法区大小难以设定, 容易产生内存溢出。永恒代寄存着 Class 相干信息,个别信息在编译期就能确定,然而如果在一些动静生成的 Class 的利用中, 如:Spring 中的动静代理, 大量的 JSP 页面或动静生成的 JSP 页面, 因为办法区在一开始就要调配好, 因而难以确定大小, 容易产生内存溢出。
GC 简单效率低, 办法区寄存元数据和各种常量, 然而这些数据被类的实例所援用, 导致垃圾回收十分艰难.
促成 HotSpot VM 和 JRockit VM 交融,JRockit VM 没有办法区

什么是元空间

元空间 永恒代 相似都是对 JVM 标准中 办法区 的实现。区别在于 元空间 不在 JVM 虚拟机中, 因而 元空间 的空间受本地内存制约。

元空间特点

  • 每个加载器都有本人的空间
  • 不会独自回收某个类
  • 元空间对象的地位是固定的
  • 如果发现某个加载器不在存活,则将整个空间回收


正文完
 0