栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

jdk8 运行时常量池在jvm的区域

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jdk8 运行时常量池在jvm的区域

都知道jdk8去除了永久代,用元空间去实现方法区,以前认为方法区是包含运行时常量池和class类型数据,后来看文章说是jdk7把运行时常量池从永久代移到堆中,那么jdk8里运行时常量池是在堆中还是元空间里呢?

先说结论:在堆中。

写个例子:

    
    private static void functionOut() {

        int i = 0;
        while (true) {
            ("hello" + i++).intern();  //intern方法会把第一次遇见的字符串存到运行时常量区里
        }
    }

直接在main方法执行后:

java.lang.OutOfMemoryError: Java heap space

内存溢出了,看来常量池是在堆中了。

在写个对照的例子,只是修改了jvm参数,限制元空间大小为10m:

    
    private static void functionOut2() {

        int i = 0;
        while (true) {
            ("hello" + i++).intern();
        }
    }

运行了几分钟没报错。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885007.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号