Java并发和并行GC

pde*_*eva 36 java concurrency garbage-collection

本文在这里建议使用-XX:+UseParNewGC"为了使与并发GC并行年轻一代的GC".

我的困惑是,为了启用并行和并发GC,我应该

  • -XX:+UseParNewGC
  • 使用-XX:+UseParNewGC -XX:+UseConcMarkSweepGC

PS

我正在使用JVM 6.

sk.*_*sk. 38

由于您链接的文档是针对1.4.2 VM的,因此我假设您正在使用(JVM 5和6的行为方式不同).

来自http://java.sun.com/docs/hotspot/gc1.4.2/

if -XX:+ UseConcMarkSweepGC用于命令行,如果没有在命令行上显式设置,则标志UseParNewGC也设置为true

所以答案是你只需要使用-XX:+ UseConcMarkSweepGC它将启用并行年轻代收集器的并发收集器.

编辑:对于Java 6,相同的标志(-XX:+ UseConcMarkSweepGC)启用并发收集器.您想要的收集器的选择取决于一些事情,您应该测试不同的配置.但是有一些非常一般的指导方针.如果您有单个处理器,单线程机器,那么您应该使用串行收集器(某些配置的默认值,可以使用-XX:+ UseSerialGC显式启用).对于工作负载基本上受CPU限制的多处理器计算机,请使用并行收集器.如果使用-server标志,则默认启用此功能,或者可以使用-XX:+ UseParallelGC显式启用它.如果您希望缩短GC暂停时间,代价是使用更多的CPU总CPU时间,并且您有多个CPU,则可以使用并发收集器(-XX:+ UseConcMarkSweepGC).

  • 您可以查看java -XX:+ PrintCommandLineFlags -XX:+ UseConcMarkSweepGC -version => -XX:+ UseParNewGC自动设置.(经1.6.0_26测试). (4认同)

小智 7

此博客条目对不同的收集器有很好的细分,哪些选项有效:http://blogs.oracle.com/jonthecollector/entry/our_collectors


Cha*_*ger 5

Java GC调优基本上是一个黑暗的艺术,但在我的应用程序(运行50 + GB堆和16个物理内核)中,ConcMarkSweep收集器导致比-server默认值快3倍,比ParallelOldGC加速2.2倍.

如果您不与其他进程共享计算机(因此闲置核心只是浪费),请使用ConcMarkSweepGC.