读书人

回答: HotSpot VM 内存堆的两个Surviv

发布时间: 2012-12-25 16:18:28 作者: rapoo

答复: HotSpot VM 内存堆的两个Survivor区
把先前在论坛回复的一些帖打捞进来。这篇的原帖是:HotSpot VM 内存堆的两个Survivor区
下面是回复内容,带补充。

=================================================================

curl 'http://hg.openjdk.java.net/jdk6/jdk6/hotspot/raw-file/tip/src/share/vm/runtime/globals.hpp' | grep -A 2 -E 'Use.*GC,'

  product(bool, UseSerialGC, false,                                         \          "Use the serial garbage collector")                               \                                                                            \  product(bool, UseG1GC, false,                                             \          "Use the Garbage-First garbage collector")                        \                                                                            \  product(bool, UseParallelGC, false,                                       \          "Use the Parallel Scavenge garbage collector")                    \                                                                            \  product(bool, UseParallelOldGC, false,                                    \          "Use the Parallel Old garbage collector")                         \                                                                            \--  product(bool, UseMaximumCompactionOnSystemGC, true,                       \          "In the Parallel Old garbage collector maximum compaction for "   \          "a system GC")                                                    \--  product(bool, UseConcMarkSweepGC, false,                                  \          "Use Concurrent Mark-Sweep GC in the old generation")             \                                                                            \--  develop(bool, UseAsyncConcMarkSweepGC, true,                              \          "Use Asynchronous Concurrent Mark-Sweep GC in the old generation")\                                                                            \--  product(bool, UseParNewGC, false,                                         \          "Use parallel threads in the new generation.")                    \                                                                            \--  product(bool, UseAdaptiveSizePolicyWithSystemGC, false,                   \          "Use statistics from System.GC for adaptive size policy")         \                                                                            \

这样grep出来的启动参数中,UseMaximumCompactionOnSystemGC和UseAdaptiveSizePolicyWithSystemGC不是选择GC算法类型的参数,另外几个都是。它们分别是
UseSerialGC
UseG1GC
UseParallelGC
UseParallelOldGC
UseAsyncConcMarkSweepGC(产品模式不可调)
UseConcMarkSweepGC
UseParNewGC
它们之间的关系请参考:Jon Masamitsu: Our Collectors


Sun(=> Oracle)的产品版JDK 6里的HotSpot同上。

------------------

JRockit R28的话,GC算法的基本设定可以用下面几个参数:
-Xgc:singlecon
-Xgc:gencon
-Xgc:singlepar
-Xgc:genpar
不过更推荐并且也更简单的是设定优化的目标,例如这几个参数:
-XgcPrio:throughput
-XgcPrio:pausetime
-XgcPrio:deterministic

有老帖描述了当时的JRockit该如何选择GC实现。

------------------

IBM J9有诸如下面几种设定GC算法的VM参数:
-Xgcpolicy:optthruput
-Xgcpolicy:optavgpause
-Xgcpolicy:gencon
-Xgcpolicy:subpool

读书人网 >编程

热点推荐