page contents

字符串常量是存在方法区还是堆呢?

Pack 发布于 2020-02-26 17:38
阅读 775
收藏 0
分类:Java开发

我看网上说法都不一样,有的还给出了例子 但是不确定 那种证明是不是对的
https://blog.csdn.net/MustangJy/article/details/88044964
这个说是在堆区

https://blog.csdn.net/guoxiaolongonly/article/details/80425548
这个说在方法区

451
Pack
Pack

https://blog.csdn.net/MustangJy/article/details/88044964连接点进去之后看了下,这篇文章有问题的,是在方法区中的。
public static void main(String[] args) {
String str = “abc”;
char[] arrays = {‘a’, ‘b’, ‘c’};
String str2 = new String(arrays);
str2 = str2.intern();
System.out.println(str == str2);

    ArrayList<String> list = new ArrayList<>();
    for (int i = 0; i < 100000000; i++) {
        for (int j = 0; j < 1000000; j++) {
            list.add(String.valueOf(i + j /1000000).intern());
        }
    }
 }

这里内存溢出的是指堆内存溢出,list是new出来的对象当然是放在堆当中的,当堆内存不够放了就会堆内存溢出,这里字符串常量池并不是指的list

请先 登录 后评论