本文在这里建议使用-XX:+UseParNewGC
"为了使与并发GC并行年轻一代的GC".
我的困惑是,为了启用并行和并发GC,我应该
用-XX:+UseParNewGC
或
使用-XX:+UseParNewGC
和 -XX:+UseConcMarkSweepGC
?
我正在使用JVM 6.
由于您链接的文档是针对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).
此博客条目对不同的收集器有很好的细分,哪些选项有效:http://blogs.oracle.com/jonthecollector/entry/our_collectors
java/JDK 6 GC调优:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html.这是来自SUN(现在的Oracle).完整的东西.
另请参阅
http://kirk.blog-city.com/is_your_concurrent_collector_failing_you.htm
http://www.javaperformancetuning.com/
Java GC调优基本上是一个黑暗的艺术,但在我的应用程序(运行50 + GB堆和16个物理内核)中,ConcMarkSweep收集器导致比-server默认值快3倍,比ParallelOldGC加速2.2倍.
如果您不与其他进程共享计算机(因此闲置核心只是浪费),请使用ConcMarkSweepGC.