jvm之Jrockit的垃圾回收算法简介

       上一篇简单介绍了一下hotspotG1的垃圾回收机制和步骤,本文则主要针对ORACLE的Jrockit进行简单介绍,其中部分信息来源于官方的文档说明。本文主要介绍一下Jrockit里面的几个常用参数选项,如有不对的地方,欢迎大家指正。

       一、-Xgc

       此选项是用来选择GC模型的,Jrockit可供选择的GC收集器有不少,如:分代收集器、单一空间并发收集器、并发标记、并行清理和同步清理等收集器。

     分代垃圾回收:在第二代垃圾回收中,此模型将对空间分成两部分:新生代(也叫nursery)和旧生代。对象在新生代中分配空间。当新生代满了时,所有应用线程暂停,将存活的对象复制到旧生代中。

    单一空间垃圾回收:在一块空间上给所有对象分配空间,没有nursery。

    并发标记清除回收:垃圾回收线程同应用线程并发执行,不会影响应用线程

    并行标记清除回收:当堆空间满了,此算法会暂停所有的应用线程,使用所有的cpu集中去做垃圾回收。跟并发标记相比,此算法有更长的停顿时间和更大的吞吐量。

   下面介绍一下参数取值

1、singlecon

     单一空间+并发模型  在singlecon模型中,大多数的垃圾回收线程跟应用线程是并发执行的,当然所有对象主要在同一块内存区域里分配空间。singlecon主要是通过减少应用的吞吐量来降低系统的响应时间。

2、gencon

    并发的分代模型     在gencon模型中,对象都是在新生代中分配空间。当新生代空间满了,会停了所有的Java线程,将存活的对象移动到旧生代中。在旧生代中,大多数垃圾回收任务会同Java线程并发执行。

3、singlepar

     单一空间并行模型  在singlepar模型中堆空间满了,所有的java线程都暂停,jvm集中所有cpu资源在堆上进行垃圾回收。与并发模型相比,此模型可以提高系统吞吐量,同时会增加gc的STW时间.

4、genpar

    分代垃圾回收模型  此模型中,对象首先在新生代中分配空间;当新生代空间满了,Jrockit JVM会停止所有的Java线程,采用并行进行新生代GC回收,并将存活的对象移动到旧生代中。当整个堆空间都满了,此时会jvm会停止所有的Java线程,只采用并行模式进行垃圾回收。此模式是放弃了线程暂停时间来提高系统的吞吐量。跟singlepar相比,如果系统中有大量的小对象,此模式更优。且此模式中会有更多的gc收集器去执行gc操作,进而会将线程暂停时间分成更小的一部分,同时在旧生代中产生更少的内存碎片。

5、genconpar

    分代垃圾回收模型,此模型是在分代模型的基础上,采用并发标记和并行清除算法。

6、genpercon

    分代垃圾回收模型,此模型是在分代模型的基础上,采用并行标记和并发清除算法。

7、singleconpar

    单一空间垃圾回收模型,此模型在单一空间的基础上,采用了并发标记和并行清除算法。

8、singleparcon

    单一空间垃圾回收模型,此模型在单一空间的基础上,采用了并行标记和并发清除算法。

9、throughput

    吞吐量优先  即GC收集器利用尽可能多的CPU资源进行GC回收。此方式的STW的停顿时间有不确定性。若系统响应时间对应用没有影响可以采用这种方式。

10、pausertime

   相应时间优先 即GC收集器同应用线程并发执行。并发收集所需要的机器资源比并行收集要多。系统默认的目标停顿时间是500ms,可以通过-XpauseTarge 来修改。

11、deterministic

    确定性的GC模型  将垃圾收集器优化成尽可能确定的短时间停顿,优化的效果取决于硬件设备,同-XpauseTarge配合使用。

-Xgc默认是使用高吞吐量的GC模型

二、-XpauseTarge

    这个值用来设置GC的目标停顿时间。如果使用确定的GC模型,此值可以设置成200ms

 本文部分参照Oracle官网。如有对这方面感兴趣的同学,欢迎扫描下方二维码关注公众号“微IT之blog”

                                                                

                                        

  


                                              


猜你喜欢

转载自blog.csdn.net/jerry_player/article/details/79435284