首页 > 其他 > 详细

JVM参数设置

时间:2019-06-19 12:46:33      阅读:106      评论:0      收藏:0      [点我收藏+]

1 JDK7和JDK8将字符串常量池存放在了堆中

  字符串常量池string pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中存放的,string pool实现为哈希表。

  测试字符串常量池

public class TestStringPool {
    //-Xms5m -Xmx5m  -XX:-UseGCOverheadLimit
    //设置最大堆内存和初始堆内存都是5M,
    //-XX:-UseGCOverheadLimit的目的是关闭检查防止抛出GC overhead limit exceeded
    //超过98%的时间用来做GC并且回收了不到2%的堆内存,会抛出GC overhead limit exceeded
    public static void main(String[] args) {
    
        String str = "abc";
        char[] array = {a, b, c};
        String str2 = new String(array);
        //使用intern()将str2字符串内容放入常量池
        str2 = str2.intern();
        //这个比较用来说明字符串字面常量和我们使用intern处理后的字符串是在同一个地方
        System.out.println(str == str2);
        //那好,下面我们就拼命的intern吧
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 50000000; i++) {
            System.out.println(i);
            String temp = String.valueOf(i).intern();
            list.add(temp);
        }
    }
}

运行一段时间后会抛出堆内存溢出:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

JVM参数设置

原文:https://www.cnblogs.com/moris5013/p/11050503.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!