JRockit的-Xgc参数及其意义
-Xgc
使用 -Xgc 可设置静态垃圾收集器。静态垃圾收集器的分类如
表:静态垃圾收集器
单空间 | 分代式 | |
并发 | 单空间并发 -Xgc:singlecon | 分代式并发 -Xgc:gencon |
并行 | 单空间并行 Xgc:singlepar(或)-Xgc:parallel | 单空间分代式 -Xgc:genpar |
某些情况下,与统一收集器或通过 -server 或 -client 标志提供的默认收集器相比,这些垃圾收集器的性能可以更好地满足您的要求。此外,如果要使用为 BEA JRockit 的早期版本编写的实现这些收集器的脚本,那么这些脚本可继续使用,无需任何修改,除非这些脚本使用已不再提供的分代式复制垃圾收集器。
操作
格式:-Xgc:<gcType>
使用 -Xgc 与下表中 中所列的垃圾收集类型 (<gcType>) 之一获取所需的垃圾收集器算法:
singlecon
设置单空间(非分代式)并发垃圾收集器。这是一种多数并发垃圾收集器 – 意味着它将与 Java 应用程序并发执行其垃圾收集工作中的多数工作。所有对象都保留在一个单独的空间(也称“代”)中。singlecon 垃圾收集为使暂停时间最短而使用了较小的应用程序吞吐量。
gencon
设置分代式并发垃圾收集器。使用此类型的垃圾收集器,对象被分配在新代(Nursery)中。Nursery 变满时,BEA JRockit 会停止所有 Java 线程并将新代中的活动对象移动到“旧代”中。 这是一种多数并发垃圾收集器 – 意味着它将与 Java 应用程序并发执行其垃圾收集工作中的多数工作。对于分配大量小的短期对象的多数应用程序,gencon 垃圾收集器优于 singlecon 垃圾收集器。gencon 垃圾收集器以最短暂停时间换取较大的堆大小和较低的应用程序吞吐量。
parallel/
singlepar
设置单空间并行垃圾收集器。并行垃圾收集器会在堆满时停止所有的 Java 线程并使用每个 CPU 执行整个堆的垃圾收集全过程。并行收集器比并发收集器的暂停时间较长,但可最大化吞吐量。如果应用程序允许更长的暂停时间,那么,即使在单 CPU 计算机上,也推荐使用并行垃圾收集器,以便最大限度地提高性能。
genpar
设置分代式垃圾收集器。使用此类型的垃圾收集器,对象首先分配在新代中。当 Nursery 变满时,BEA JRockit 会停止所有的 Java 线程并执行并行 Nursery 收集;即,它使用所有可用的 CPU 资源并将新代中的所有活动对象移动到旧代中。旧代收集器会在堆变满时停止所有的 Java 线程并执行并行垃圾收集全过程。此收集器将吞吐量的优先级排在暂停时间之前。
对于分配大量小的短期对象的应用程序,此收集器通常优于 singlepar 垃圾收集器。虽然 genpar 收集器执行的垃圾收集次数多于 singlepar 收集器执行的垃圾收集次数,但前者单次暂停时间较短,并且在旧代空间中带来的碎片也较少。
默认值
这些默认值适用于 -Xgc
:
当 BEA JRockit 以-client
模式运行时,singlecon
是默认的垃圾收集器当 BEA JRockit 以-server
模式运行时,singlepar/parallel
是默认的垃圾收集器
受影响的标志或其他选项
在指定 -Xgc
时,将影响以下选项:
设置 -XXsetGC 将替换-Xgc
,反之亦然设置-Xgc
将替换-server
和-client
的部分效果。
异常
使用 -Xgc
时,请注意以下异常:
如果设置静态垃圾收集器,将不能充分使用管理 API;即,API 的某些功能将不可用。不能将-Xgc
与以下任一选项结合使用:-XgcPrio
-XpauseTarget