Java并发和平行的GC
-
03-07-2019 - |
题
这篇文章 在这里, 建议使用 -XX:+UseParNewGC
"要使一个平行的年轻一代的GC与并发GC".
我的困惑的是,为了使两个平行和并发GC,我应该
- 使用
-XX:+UseParNewGC
或 - 使用两个
-XX:+UseParNewGC
和-XX:+UseConcMarkSweepGC
?
PS
我使用JVM6.
解决方案
由于文档你挂的是一1.4.2虚拟机是什么,我假设你正在使用(Jvm5和6的行为不同).
从 http://java.sun.com/docs/hotspot/gc1.4.2/
如果-XX:+UseConcMarkSweepGC用上 命令行后的标志 UseParNewGC也被设定为真实的,如果它 是不是另有明确设置上 命令行
所以答案是你只需要使用x-x:+UseConcMarkSweepGC,它将使同期收集与平行的年轻一代的收集器。
编辑:Java6,同样的标记(-XX:+UseConcMarkSweepGC)使并行的收集器。选择的收集器你想要取决于一些事情,你应该试验不同的配置。但也有一些非常一般的指导方针。如果你有一个单一的处理器,单线的机器,那么你应该使用串行收集(默认对于一些结构,可以启用明确的-XX:+UseSerialGC).对于多处理机里工作负荷基本上是CPU定,使用平行的收集器。这是默认,如果您使用的服务器的标志,或者您可以使它能够明确-XX比较.如果你宁愿保持GC暂停时间较短的费用使用更多的总CPU时间GC和你有一个以上的CPU,可以使用并发收集器(XX:+UseConcMarkSweepGC).注意,同时集倾向于需要更多的RAM分配给JVM比序或平行的收藏家对于给定的工作量,因为一些记忆碎片可能发生。
其他提示
java/JAVA6GC调: http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html.这是从太阳(现在Oracle).全部东西。
此外,看到
http://kirk.blog-city.com/is_your_concurrent_collector_failing_you.htm
http://www.javaperformancetuning.com/
这个博客的条目有一个很好的故障的不同的收藏家,并且其选择是有效的: http://blogs.oracle.com/jonthecollector/entry/our_collectors
Java GC调整基本上是一个黑暗的艺术,但是在我的应用程序(运行50多GB堆和16物理核心)的ConcMarkSweep集了3倍加速通过服务器的默认,和一个x2.2加速超过ParallelOldGC.
如果你不共享的机与其他进程(这么空闲的核心都是浪费)使用ConcMarkSweepGC.
ParNew是默认的年轻一代的收集器时,CMS是使用。你只需要指定-XX:+UseConcMarkSweepGC使用CMS和ParNew会默认情况下使用。CMS是一个良好的收集器,如果避免GC紧张的更高优先权,但如果吞吐量更重要的是对例如一批喜欢的工作的默认的日光平行收集并更好的工作。
你不能使两个GC选择在同一时间。我建议你使用CMS这是更好的比和下一代的GC比较UseParNewGC.如果你使用Java1.7或后和堆尺寸比较大的(像>4G)考虑使用G1。