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

时间:2015-06-18 09:39:20

标签: java string string-pool

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

1 个答案:

答案 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