java8移除永久代
来源:互联网 发布:启动windows任务管理器 编辑:程序博客网 时间:2024/05/09 06:15
最近看深入理解Java虚拟机, 在实战OutOfMemoryError的运行时常量池溢出时, 提示如下:
原书没有说会出现这个警告, 所以上网详细查下相关资料, 汇总如下
在JDK1.7中, 已经把原本放在永久代的字符串常量池移出, 放在堆中. 为什么这样做呢? 因为使用永久代来实现方法区不是个好主意, 很容易遇到内存溢出的问题. 我们通常使用PermSize和MaxPermSize设置永久代的大小, 这个大小就决定了永久代的上限, 但是我们不是总是知道应该设置为多大的, 如果使用默认值容易遇到OOM错误.
找下jdk1.8的Milestones, 链接在这: http://openjdk.java.net/projects/jdk8/milestones. 其中 “JEP 122: Remove the Permanent Generation“说的就是移除永久代.
文中说实现目标:
类的元数据, 字符串池, 类的静态变量将会从永久代移除, 放入Java heap或者native memory. 其中建议JVM的实现中将类的元数据放入 native memory, 将字符串池和类的静态变量放入java堆中. 这样可以加载多少类的元数据就不在由MaxPermSize控制, 而由系统的实际可用空间来控制.
为什么这么做呢? 减少OOM只是表因, 更深层的原因还是要合并HotSpot和JRockit的代码, JRockit从来没有一个叫永久代的东西, 但是运行良好, 也不需要开发运维人员设置这么一个永久代的大小.
当然不用担心运行性能问题了, 在覆盖到的测试中, 程序启动和运行速度降低不超过1%, 但是这一点性能损失换来了更大的安全保障.
0 0
- Java8移除永久代
- java8移除永久代
- Java8移除永久代
- JVM —— 移除永久代
- jdk8永久代从方法区移除的验证
- JAVA8.0 永久代(PermGen. ) ---> 元空间(Metaspace. )
- Java8 JVM内存模型 永久代和元空间
- java8内存模型——永久代和元空间
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—从永久代(PermGen)到元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- c#TextBox输入框自动提示、自动完成、自动补全功能
- effective java(一)遇到多个构造器参数 时要考虑用构建器
- Android动态壁纸详解
- 判断整数k(k<1000)能被两个质数相加的组合(低效率 求高效率的方法)
- Arduino学习(一):入门篇:软硬件安装 以及 hello,world编译执行
- java8移除永久代
- 【codeforces711B】Chris and Magic Square
- 【note】PAT甲级刷题笔记
- 6.vc从零开始 -- Win32项目hello world(四)
- iOS 通过图片文件头,获取图片类型,以及图片尺寸
- NYOJ18-动态规划水
- Android killer smali文件或已丢失,无法执行打开操作
- HTML5中 svg的animateTransform中rotate类型中围绕点设定
- nod51-1242斐波那契数列-矩阵快速幂