2013-02-15 50 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