Java 字符串文字内存利用率

Java 字符串文字内存利用率,java,string,memory,Java,String,Memory,java中有字符串文字池的概念。如果我没有在代码中创建任何字符串,那么这个内存池对我来说是浪费。如何使用此内存区域,而不是将其保留在字符串文字池中 如何使用此内存区域,而不是将其保留在字符串文字池中 它是JVM保留的区域,并且随着程序的运行而增加(达到某个阈值)。简而言之,您不能将其用于其他目的。没有“字符串文字池”;字符串文字是,但这意味着它们只是堆上的普通对象。它们可能会被大量引用,并以这种方式节省内存,但从根本上说,它们与任何其他对象都没有区别 如果您的程序中不存在字符串文本(并且您从未调

java中有字符串文字池的概念。如果我没有在代码中创建任何字符串,那么这个内存池对我来说是浪费。如何使用此内存区域,而不是将其保留在字符串文字池中

如何使用此内存区域,而不是将其保留在字符串文字池中

它是JVM保留的区域,并且随着程序的运行而增加(达到某个阈值)。简而言之,您不能将其用于其他目的。

没有“字符串文字池”;字符串文字是,但这意味着它们只是堆上的普通对象。它们可能会被大量引用,并以这种方式节省内存,但从根本上说,它们与任何其他对象都没有区别


如果您的程序中不存在字符串文本(并且您从未调用过),那么JVM不会为这些文本分配堆内存。没有“隐藏”内存区域,您不需要做任何事情来“访问它”。

我认为这没有任何意义。无论如何,理论上,字符串池位于Java堆的permgen区域。这与JVM存储类的内存相同。默认情况下(至少对于Oracle HotSpot JVM),它是64 M。您可以尝试使用两个HotSpot JVM选项配置此区域:-XX:MaxPermSize和-XX:PermSize。permgen越少,对象的内存就越多。

你是说池有固定的保留空间,不管它是否使用它?不!!如果不使用,它将是空的。(即堆)可能与+1重复注意:自Java7以来,字符串位于堆(outisde perm gen)上。