使用元空间替代永久代作为方法区的原因

简介: 元空间替代永久代作为方法区

Java虚拟机规范规定的方法区只是换种方式实现。有客观和主观两个原因。

  • 客观上使用永久代来实现方法区的决定的设计导致了Java应用更容易遇到内存溢出的问题(永久代有-XX:MaxPermSize的上限,即使不设置也有默认大小,而J9和JRockit只要没有触碰到进程可用内存的上限,例如32位系统中的4GB限制,就不会出问题),而且有极少数方法 (例如String::intern())会因永久代的原因而导致不同虚拟机下有不同的表现。
  • 主观上当Oracle收购BEA获得了JRockit的所有权后,准备把JRockit中的优秀功能,譬如Java Mission Control管理工具,移植到HotSpot 虚拟机时,但因为两者对方法区实现的差异而面临诸多困难。考虑到HotSpot未来的发展,在JDK 6的 时候HotSpot开发团队就有放弃永久代,逐步改为采用本地内存(Native Memory)来实现方法区的计划了,到了JDK 7的HotSpot,已经把原本放在永久代的字符串常量池、静态变量等移出,而到了 JDK 8,终于完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Meta-space)来代替,把JDK 7中永久代还剩余的内容(主要是类型信息)全部移到元空间中。
相关文章
|
4天前
|
Java
JVM之本地内存以及元空间,直接内存的详细解析
JVM之本地内存以及元空间,直接内存的详细解析
40 0
|
7月前
|
调度
【空间分配担保策略】
【空间分配担保策略】
|
4天前
|
存储 监控 算法
垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程
垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程
|
4天前
|
存储 运维 Oracle
JDK1.8为什么使用元空间代替了永久代
JDK1.8为什么使用元空间代替了永久代
|
4天前
|
存储 Java 编译器
方法区、永久代、元空间之间有什么关系
方法区、永久代、元空间之间有什么关系
|
10月前
|
存储 Java 程序员
【JVM】方法区与永久代、元空间之间的关系
【JVM】方法区与永久代、元空间之间的关系
118 0
|
9月前
|
存储 算法 Java
JVM 收集算法 垃圾收集器 元空间 引用
JVM 收集算法 垃圾收集器 元空间 引用
75 0
|
10月前
|
Java
新生代、老年代、永久代的区别?
新生代、老年代、永久代的区别?
186 0
|
10月前
|
算法 安全 Java
18-动态对象年龄判断+空间分配担保规则+老年代回收算法
本文中用到的案例是接着上一篇文章继续的,如果有不清楚同学请先查看上一篇文章
90 0
 18-动态对象年龄判断+空间分配担保规则+老年代回收算法
|
存储 算法 安全
【垃圾回收器、垃圾回收算法、空间分配担保】
【垃圾回收器、垃圾回收算法、空间分配担保】