如果字符串池内存不足会怎样?
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
如果字符串池中有很多字符串字面值并且内存不足,会发生什么情况。它的尺寸会变大吗?如果是,如何变大?如果不是,如果我尝试创建更多字符串文字会发生什么?
首先要点 - 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