2013-02-15 56 views
1

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

+0

可能重复的[我们可以避免interning在java中的字符串?](http://stackoverflow.com/questions/5672688/can-av-a-oid-interning-of-strings-in-java) – assylias 2013-02-15 11:02:24

回答

0

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

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

+1

你是说游泳池有固定的预留空间,无论是否使用它? – assylias 2013-02-15 10:55:39

+0

不!如果完全不使用,它将是空的。 (即堆) – Azodious 2013-02-15 11:00:49

2

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

如果您的程序中没有字符串文字(并且您没有调用String.intern),那么JVM不会为此分配堆内存。没有涉及“隐藏”的内存区域,您不需要做任何事情来“访问它”。

1

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

+0

+1注意:从Java 7开始,字符串位于堆(outisde perm gen)上。 – assylias 2013-02-15 11:27:10