如果String Pool上有很多字符串文字并且内存不足,会发生什么。是否会增加它的大小,如果是的话怎么样?如果没有,如果我尝试创建更多的字符串文字会发生什么?
答案 0 :(得分:13)
第一点 - STRING POOL没有字符串文字
String Pool是一个指向String Objects的引用的集合。
当你写String ="你好"它创建了一个String对象"你好"在堆上并将在String Literal Pool中放置对此对象的引用(前提是没有Object已经存在于名为&#34的堆上; Hello")
指向要点 "你好"是 添加到相应类的常量池中。因此,只有在卸载类后才可以对其进行垃圾回收。所以当卸载类时,Objects会得到GC
会发生什么?
字符串池是通过一个名为string canonicalisation的进程完成的,这是一个weakHashMap。当没有其他对键的引用时,这个weakHashMap会自动清除映射。 值。 .ie字符串将从JVM中收集垃圾。
它的大小是否会增长?
没有STROL POOL没有增长 - 它是编译时间常数
它的规模如何增长?
您需要在编译时指定 -XX:StringTableSize = N ,其中N是字符串池映射大小
最后你的问题:
如果String Pool内存不足会怎么样?
最简单的答案:从Java 7开始,你得到java.lang.OutOfMemoryError:java.lang.OutOfMemoryError: Java heap space
。虽然旧版java中的java.lang.OutOfMemoryError: PermGen space
喜欢6