Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java字符串池的一些查询_Java_String - Fatal编程技术网

关于Java字符串池的一些查询

关于Java字符串池的一些查询,java,string,Java,String,我对java字符串池有以下疑问: 它是java堆的一部分吗?它是JVM本机堆的一部分吗?据我所知,它是第一个 我们对这个字符串池的大小有限制吗?或者它是用户可配置的吗 在以下两项声明中: String str = "Stack"; String str2 = str.concat("overflow"); 根据我的理解,第一个字符串文字将是字符串池的一部分,但在那之后,我对同一个字符串池对象进行了concat,它将创建新的字符串对象,那么这个对象将被分配到字符串池中还是字符串池外的java堆

我对java字符串池有以下疑问:

  • 它是java堆的一部分吗?它是JVM本机堆的一部分吗?据我所知,它是第一个

  • 我们对这个字符串池的大小有限制吗?或者它是用户可配置的吗

  • 在以下两项声明中:

    String str = "Stack";
    String str2 = str.concat("overflow");
    
  • 根据我的理解,第一个字符串文字将是字符串池的一部分,但在那之后,我对同一个字符串池对象进行了concat,它将创建新的字符串对象,那么这个对象将被分配到字符串池中还是字符串池外的java堆中


    四,。我假设字符串池大小是固定的,那么如果这个字符串池被完全占用会发生什么?gc会清理字符串池吗?或者JVM可以扩展字符串池大小吗?

    在当前Sun/Oracle实现中,内部字符串将与类数据一起永久生成Java堆。字符串没有单独的内存区域

    此区域的最大大小可通过命令行选项配置(
    -XX:MaxPermGen
    或其他内容)

    通常,
    concat
    将创建一个新的
    String
    对象,该对象被分配为任何其他对象

    如果PermGen已满,则会出现
    OutOfMemoryError
    。GC通常在PermGen上运行,但频率较低

    所有这些都可能在实现和版本之间发生变化