深入理解JVM-垃圾回收器


声明:本文转载自https://my.oschina.net/u/3187740/blog/1614866,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

看完《深入理解JVM》,结合网上资料后根据跟人理解整理出的简洁版,主要关注是什么, 怎么做到的,特点等,没有进入深入剖析,旨在快速了解,具体应用时个人再根据具体点去进行深入。欢迎留言讨论!

 

是什么?

     垃圾回收器是垃圾回收算法的包装,可以在JVM中设置需要使用的垃圾回收器;

怎么做?

     Serial收集器

          单线程进行垃圾回收, 执行回收过程中,程序会暂停。

          特点:简单高效,适用于单个CPU场景。常用于新生代回收;

     SerialOld:      Serial的老年代版本;用于老年代回收;

     parnew收集器:

          Serial 的多线程版本,回收过程中,程序也会暂停;

          特点:适合多核场景,用于新生代回收,可以与CMS配合;

      Parallel收集器:

         并行回收,程序会暂停,可控制吞吐量;

         特点:吞吐量优先,更关注可控制的吞吐量,用于新生代回收;

     ParallelOld收集器:paraller老年代版本;

      parallel+parallelOld  为吞吐量优先组合,当应用程序运行在具有多个CPU上,对暂停时间没有特别高的要求时,即程序主要在后台进行计算,而不需要与用户进行太多交互

      例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序;

      cms收集器:

          采用标记整理算法,多线程回收,仅用于老年代;

          运作流程:初始标记、并发标记、重新标记、并发清除

          在并发标记、并发清除阶段可以多线程并行进行;

          特点:并发收集,低停顿,以回收最短停顿时间为目标,适用于常见B/S场景;

          缺点:

               需要内存大,影响吞吐;

               无法及时清理浮动垃圾;

               产生大量内存碎片;

          解决办法:

             通过 -XX:CMSInitiatingOccupancyFraction设置预留空间,以减少因为浮动垃圾,导致内存空间无法满足导致的fullgc;

             通过 -XX:+UseCMSCompactAtFullCollection开启碎片合并整理;

             配合-XX:+CMSFullGCsBeforeCompaction设置执行多少次不压缩的fullgc后进行一次整理压缩;

 

       G1收集器:

              1.7版本推出,多线程处理,可管理整个堆内存的垃圾回收:

              运作流程:初始标记、并发标记、最终标记、筛选回收

              特点:

                    结合多种垃圾算法,空间整合,不产生碎片

                    低停顿的同时实现高吞吐量

              场景:面向服务端应用,针对具有大内存、多处理器的机器;

                        最主要的应用是为需要低GC延迟,并具有大堆的应用程序提供解决方案;

                        如:在堆大小约6GB或更大时,可预测的暂停时间可以低于0.5秒;

                    

 

常用参数:

-XX:+UseSerialGC:在新生代和老年代使用串行收集器

-XX:+UseParNewGC:在新生代使用并行收集器

-XX:+UseParallelGC :新生代使用并行回收收集器,更加关注吞吐量

-XX:+UseParallelOldGC:老年代使用并行回收收集器

-XX:ParallelGCThreads:设置用于垃圾回收的线程数

-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器

-XX:ParallelCMSThreads:设定CMS的线程数量

-XX:+UseG1GC:启用G1垃圾回收器

-XX:InitiatingHeapOccupancyPercent:当整个Java堆的占用率达到参数值时,开始并发标记阶段;默认为45;

-XX:MaxGCPauseMillis:为G1设置暂停时间目标,默认值为200毫秒;

-XX:G1HeapRegionSize:设置每个Region大小,范围1MB到32MB;目标是在最小Java堆时可以拥有约2048个Region;

 

 

参考地址:

  http://www.cnblogs.com/leefreeman/p/7402695.html

  http://blog.csdn.net/tjiyu/article/details/53983650

本文发表于2018年01月29日 12:39
(c)注:本文转载自https://my.oschina.net/u/3187740/blog/1614866,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1933 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1