如果字符串池上有很多字符串字面量并且内存不足会发生什么情况。它是否会扩大规模,如果是,如何?如果没有,如果我尝试创建更多的字符串文字会发生什么?
1 回答
首先第一点 - STRING POOL 没有字符串文字
字符串池是指向字符串对象的引用集合。
当您编写 String = "hello" 时,它会在堆上创建一个字符串对象 "hello",并将对该对象的引用放在字符串字面量池中(前提是堆上没有名为 "Hello" 的对象)
注意事项 "hello" 被 添加到对应类的常量池中。因此,只有在类卸载后才能对其进行垃圾回收。所以当类被卸载时,Objects 得到 GC
会发生什么?
字符串池是通过一个称为字符串规范化的过程完成的,该过程是一个弱哈希映射。当没有其他对键或值的引用时,这个弱哈希映射会自动清除映射。.ie 字符串将从 JVM 中被垃圾回收。
它会变大吗?
NO STRING POOL DOESNOT IN SIZE - 这是编译时间常数
它是如何变大的?
您需要在编译时指定-XX:StringTableSize=N,其中 N 是字符串池映射大小
最后你的问题:
如果字符串池内存不足会怎样?
最简单的答案:您java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space
从 java 7 开始。在java.lang.OutOfMemoryError: PermGen space
像 6 这样的旧版 java 中