共计 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 虚拟机中, 因而元空间
的空间受本地内存制约。
元空间特点
- 每个加载器都有本人的空间
- 不会独自回收某个类
- 元空间对象的地位是固定的
- 如果发现某个加载器不在存活,则将整个空间回收
正文完