关于Java字符串池的一些查询
我对java字符串池有以下疑问:关于Java字符串池的一些查询,java,string,Java,String,我对java字符串池有以下疑问: 它是java堆的一部分吗?它是JVM本机堆的一部分吗?据我所知,它是第一个 我们对这个字符串池的大小有限制吗?或者它是用户可配置的吗 在以下两项声明中: String str = "Stack"; String str2 = str.concat("overflow"); 根据我的理解,第一个字符串文字将是字符串池的一部分,但在那之后,我对同一个字符串池对象进行了concat,它将创建新的字符串对象,那么这个对象将被分配到字符串池中还是字符串池外的java堆
String str = "Stack";
String str2 = str.concat("overflow");
四,。我假设字符串池大小是固定的,那么如果这个字符串池被完全占用会发生什么?gc会清理字符串池吗?或者JVM可以扩展字符串池大小吗?在当前Sun/Oracle实现中,内部字符串将与类数据一起永久生成Java堆。字符串没有单独的内存区域 此区域的最大大小可通过命令行选项配置(
-XX:MaxPermGen
或其他内容)
通常,concat
将创建一个新的String
对象,该对象被分配为任何其他对象
如果PermGen已满,则会出现OutOfMemoryError
。GC通常在PermGen上运行,但频率较低
所有这些都可能在实现和版本之间发生变化