GC参数

来源:互联网 发布:网络直播怎么下载 编辑:程序博客网 时间:2024/06/06 17:53
1.串行收集器

1,最古老,最稳定

2,效率高

3,可能会产生较长的停顿

      -XX:+UseSerialGC     

    --新生代,年老代使用串行回收

            --新生代复制算法

            --年老代标记-压缩

   

应用程序线程可能有多个,一旦回收开始,这些线程全部暂停,由GC线程接替运行,在串行回收器中,gc线程只有一个,当GC完成后,应用程序回复运行。

 

 上面两个是串行回收器的日志输出,第一个是新生代的日志输出:GC+执行时间;第二个是FULL GC是老年代的输出。


2.并行收集器

2.1 ParNew(新生代收集器)

-XX:+UseParNewGc      新生代并行,老年代串行


和串行收集器一样,同时又STOP-WORLD出现,即所有程序暂停运行,但它在回收的时候是多个线程进行回收


2.2 Parallel收集器

   --类似ParNew

    --新生代复制算法,年老代标记-压缩

    --更加关注吞吐量

   -- xx:+UseParallelGC : 使用Parallel收集器+年老代串行

   -- xx:+UseParalleOldlGC : 使用Parallel收集器+并行年老代




3.CMS收集器(年老代回收器)

--Concurrent Mark Sweep 并发标记清除

--标记清除算法

--并发阶段会降低吞吐量

--年老代收集器(新生代使用ParNew)

-- -XX:+UseConMarkSweepGC





在标记的过程中,应用程序仍然在执行,所有会有新的垃圾产生,标记可能会有不正确,所有要进行修正,重新标记可以说是并发标记的补充,不会花费太多的时间



注意:

标记-清除相对于标-记压缩法会产生碎片,所以使用标记清除算法之后,还有一件必不可少的事情就是把标记清除之后的结果做一次压缩,这也就是为什么串行收集器和并行收集器都使用标记压缩算法而不是标记清除算法(无碎片产生,效果好);

但是为什么CMS用标记-清除?因为它更关注停顿,希望做GC的时候和用户线程一起去工作,若使用标记-压缩算法,在清理的时候,会移动可用对象的空间,应用程序线程可能找不到要用的对象在哪里,所有就很难和应用程序并发执行。

问题:

为了减轻GC压力,我们需要注意什么?1,软件如何设计架构   2,代码如何写   3,对空间如何分配




1 0
原创粉丝点击