我对java字符串池有以下查询:
String str = "Stack";String str2 =str2
根据我的理解,第一个字符串文本将是字符串池的一部分,但在此之后,我在同一个字符串池对象上进行了连接,它将创建新的string对象,因此该对象是在字符串池中分配还是在字符串池外的java堆中分配呢?
4.我假设字符串池大小是固定的,那么如果这个字符串池被完全占用会发生什么? gc会清理字符串池吗?或者JVM可以扩展字符串池大小?
发布于 2010-09-06 17:38:16
在当前的Sun/Oracle实现中,实习生字符串将与类数据一起在Java堆的永久生成中进行。字符串没有单独的内存区域。
这个区域的最大大小可以使用命令行选项(-XX:MaxPermGen或其他什么)进行配置。
通常,concat将创建一个与其他对象一样分配的新String对象。
如果PermGen被填满,那么您将得到一个OutOfMemoryError。GC通常在PermGen上运行,但频率较低。
所有这些都可能在实现和版本之间发生更改。
https://stackoverflow.com/questions/3653255
复制相似问题