如果字符串池内存不足会怎样?

What happens if String Pool runs out of memory?

如果字符串池中有很多字符串字面值并且内存不足,会发生什么情况。它的尺寸会变大吗?如果是,如何变大?如果不是,如果我尝试创建更多字符串文字会发生什么?

首先要点 - STRING POOL 没有字符串文字

字符串池是指向字符串对象的引用集合。

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

的堆

注意点"hello"是添加到对应[=53的常量池=]。因此,只有在 class 卸载后才能进行垃圾回收。因此,当 class 被卸载时,对象得到 GC

What will happens?

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

Does it Grow in size?

没有字符串池的大小不会增长 - 它是编译时间常数

How it Grow in Size ?

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

最后你的问题:

What happens if String Pool runs out of memory?

最简单的答案:您从 java 7 开始获得 java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space。而 java.lang.OutOfMemoryError: PermGen space 在旧版本的 java 中像 6