字符串文字内存利用率

时间:2013-02-15 10:50:42

标签: java string memory

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

3 个答案:

答案 0 :(得分:2)

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

如果程序中不存在字符串文字(并且您没有调用String.intern),则JVM不会为此分配堆内存。没有涉及“隐藏”的内存区域,您无需执行任何操作即可“访问它”。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

  

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

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