如果String Pool内存不足会发生什么?

Mil*_*dey 5 java string string-pool

如果字符串池上有许多字符串文字并且内存不足,会发生什么.是否会增加它的大小,如果是的话怎么样?如果没有,如果我尝试创建更多的字符串文字会发生什么?

Ank*_*and 13

第一点 - STRING POOL没有字符串文字

String Pool是指向String对象的引用的集合.

当你编写String ="hello"时,它会在堆上创建一个String对象"hello",并在String Literal Pool中放置对该对象的引用(前提是没有Object已经存在于名为"Hello"的堆上)

注意 "hello"被 添加到相应类的常量池中.因此,只有在卸载类后才可以对其进行垃圾回收.所以当卸载类时,Objects会获得GC

会发生什么?

字符串池是通过一个称为字符串规范化的过程完成的,这是一个weakHashMap.当没有其他对键或值的引用时,这个weakHashMap会自动清除映射..ie字符串将从JVM中收集垃圾.

它的大小是否会增长?

没有STROL POOL没有增长的大小 - 这是编译时间常数

它的大小如何增长?

您需要在编译时指定-XX:StringTableSize = N,其中N是字符串池映射大小

最后你的问题:

如果String Pool内存不足会发生什么?

最简单的答案:你java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space从java 7开始.虽然java.lang.OutOfMemoryError: PermGen space在旧版本的java中喜欢6