1

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

4

3 回答 3

2

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

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

于 2013-02-15T10:56:07.553 回答
1

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

于 2013-02-15T11:09:44.607 回答
0

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

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

于 2013-02-15T10:54:19.113 回答