我最近阅读有关所有在JRE 6 [ Java虚拟机中可用的JVM参数选项]和看到这个:

  

-XX:+ StringCache:使能共同分配字符串缓存

现在我一直的印象是,Java的保持实习池(正确的字?)字符串和做一些像字符串连接时与文字它没有创建新的对象,但此池中拉他们。有没有人使用过这种说法,或者可以解释为什么需要它?

编辑:我试图运行的基准,看看这种说法有任何影响,是无法得到太阳JVM承认它。这与:

java version "1.6.0_11"  
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode,
sharing)

所以我不知道这种说法在所有工作。

有帮助吗?

解决方案 6

我一直没能找到,即使是接受这个所谓的论据单一JVM - 所以我想没有太多好说的。

其他提示

相信随着-XX:+AggressiveOpts使用时它能够使相同String对象要返回创建在用相同的文本String(虽然不是通过new String,当然)。有一个轮廓相,其中一个缓存是建立和点之后的缓存被切换为只读。它得到在某些基准较高的分数。

-XX:-UseStringCache对我的作品,奇怪。

我的JDK的版本应为1.6.0_22

我也不能得到上述工作,但最新的JBB @ spec.org显示它的使用:-XX:-UseStringCache。我将不得不重新运行基准测试,看它是否有差别(一个XML重型应用)。

我还没有能找到一个尊重此设置一个JVM;作为评价各地JVM参数文件的质量,从而用处是可怕的,但出于某种原因,似乎是个JVM厂商看到房间的差异化竞争的领域 - 虽然是公平甲骨文/ Sun是迄今为止最糟糕的

总之,如果你发现你在某些特定领域的应用使用了少量的字符串值,然后反复它绝对是明智的使用实习 - 通过使用中的String.intern()方法返回一个实习生池的价值。请注意,您必须使用的返回值,这是不是对原始值的副作用。

对于所有的分析/性能调整这需要小心地用度量和测试完成。它可以是显著(对我来说),但如果值池是不小的它会降低性能,你需要知道的字符串值池在烫发根举行,因此使用它会影响内存使用,GC等

作为JDK 8.0,此选项已被删除。这是我不清楚,如果有的话,可以作为替代品。

http://docs.oracle.com/ JavaSE的/ 8 /文档/技术说明/工具/ UNIX / java.html

 -XX:+UseStringCache

    Enables caching of commonly allocated strings. This option was removed from JDK 8 
    with no replacement.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top