1、分代垃圾回收流程示意选择合适的垃圾收集算法串行收集器用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M 左右)情况下的多处理器机器上。可以使用-XX:+UseSerialGC 打开。并行收集器对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间。一般在多线程多处理器机器上使用。使用-XX:+UseParallelGC.打开。并行收集器在 J2SE5.0 第六6 更新上引入,在 Java SE6.0 中进行了增强-可以对年老代进行并行收集。如果年老代不使用并发收集的话,默认是使用
2、单线程进行垃圾回收,因此会制约扩展能力。使用-XX:+UseParallelOldGC 打开。 使用-XX:ParallelGCThreads=设置并行垃圾回收的线程数。此值可以设置与机器处理器数量相等。 此收集器可以进行如下配置:最大垃圾回收暂停:指定垃圾回收时的最长暂停时间,通过-XX:MaxGCPauseMillis=指定。为毫秒.如果指定了此值的话,堆大小和垃圾回收相关参数会进行调整以达到指定值。设定此值可能会减少应用的吞吐量。吞吐量:吞吐量为垃圾回收时间与非垃圾回收时间的比值,通过-XX:GCTimeRatio=来设定,公式为 1/(1+N)。例如,-XX:GCTimeRatio=1
3、9时,表示 5%的时间用于垃圾回收。默认情况为 99,即 1%的时间用于垃圾回收。并发收集器可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少的时间,此收集器适合对响应时间要求比较高的中、大规模应用。使用-XX:+UseConcMarkSweepGC 打开。并发收集器主要减少年老代的暂停时间,他在应用不停止的情况下使用独立的垃圾回收线程,跟踪可达对象。在每个年老代垃圾回收周期中,在收集初期并发收集器 会对整个应用进行简短的暂停,在收集中还会再暂停一次。第二次暂停会比第一次稍长,在此过程中多个线程同时进行垃圾回收工作。 并发收集器使用处理器换来短暂的停顿时间。在一个 N 个处理器的系统上,并发收集部分使用 K/N 个可用处理器进行回收,一般情况下 1指定还有多少剩余堆时开始执行并发收集小结串行处理器:-适用情况:数据量比较小(100M 左右);单处理器下并且对响应时间无要求的应用。 -缺点:只能用于小型应用并行处理器:-适用情况:“对吞吐量有高要求”,多 CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。 -缺点:垃圾收集过程中应用响应时间可能加长并发处理器:-适用情况:“对响应时间有高要求”,多 CPU、对应用响应时间有较高要求的中、大型应用。举例:Web 服务器/应用服务器、电信交换、集成开发环境。