代码之家  ›  专栏  ›  技术社区  ›  Gandalf

jvm-xx:+stringcache参数?

  •  19
  • Gandalf  · 技术社区  · 15 年前

    我最近在读JRE 6中提供的所有JVM参数[ Java VM Options ]看到了这个:

    -xx:+stringcache:启用常用分配字符串的缓存。

    现在,我总是觉得Java保持了一系列的界面(正确的单词?)字符串,当执行类似字符串与文本连接的操作时,它不会创建新对象,而是将它们从这个池中提取出来。有没有人使用过这个论点,或者能够解释为什么需要它?

    编辑: 我尝试运行一个基准,看看这个参数是否有任何影响,并且无法让Sun 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 回复  |  直到 8 年前
        1
  •  6
  •   Tom Hawtin - tackline    15 年前

    我相信当与 -XX:+AggressiveOpts 它使相同的 String 创建时要返回的对象 使用相同的文本(尽管不是通过 new String 当然。存在一个配置文件阶段,在该阶段建立缓存,然后在一个点之后将缓存切换为只读。它在某些基准中得到更高的分数。

        2
  •  3
  •   xshi    14 年前

    -奇怪的是,useStringCache为我工作。

    我的JDK版本应该是1.6.0_22

        3
  •  1
  •   mark d    15 年前

    我也无法让上面的内容发挥作用,但是最新的jbb@spec.org显示了它的用途:-xx:-useStringCache。我将不得不重新运行基准测试,看看它是否会产生影响(一个XML重的应用程序)。

        4
  •  1
  •   Jason    14 年前

    我也没能找到一个尊重这个设置的JVM;正如我所评论的那样,关于JVM参数的文档的质量和有用性是很糟糕的,然而出于某种原因,似乎是一个JVM供应商看到竞争差异化空间的领域——尽管公平地说,Oracle/Sun是迄今为止最糟糕的。

    不管怎样,如果你发现你的应用在某些特定区域重复使用少量的字符串值,那么使用interning绝对是明智的——使用string.intern()方法返回一个intern pool值。请注意,您必须使用返回值,这不是对原始值的副作用。

    与所有的分析/性能调整一样,这需要通过度量和测试来仔细完成。它可能很重要(对我来说是如此),但是如果值池不小,它会降低性能,您需要知道字符串值池保存在perm gen中,因此使用它会影响内存使用、gc等。

        5
  •  1
  •   mjuarez    8 年前

    自JDK 8.0起,此选项已被删除。我不清楚,如果有的话,可以用什么来替代。

    http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

     -XX:+UseStringCache
    
        Enables caching of commonly allocated strings. This option was removed from JDK 8 
        with no replacement.
    
        6
  •  0
  •   Gandalf    15 年前

    我还没有找到一个能够接受这个假设的论点的JVM——所以我想没有什么可以说的了。