• 深入理解JVM-垃圾回收器


    摘要: JVM垃圾回收器

    看完《深入理解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;

    一个Java交流平台分享给你们,让你在实践中积累经验掌握原理。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java学习交流群:642830685

    注:加群要求

    1、大学学习的是Java相关专业,毕业后面试受挫,找不到对口工作

    2、在公司待久了,现在过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的

    3、参加过线下培训后,知识点掌握不够深刻,就业困难,想继续深造

    4、已经在Java相关部门上班的在职人员,对自身职业规划不清晰,混日子的

    5、有一定的C语言基础,接触过java开发,想转行的

  • 相关阅读:
    PHP sessions that have already been started
    DOM对象和JQuery对象的区别
    iOS在支持arc的工程中,导入不支持arc的第三方的插件
    Android下利用RadioGroup和RadioButton实现Tabbar的效果
    iOS7.1以后企业应用发布需要HTTPS协议,解决步骤
    Scrapy基础(四)————Scrapy的使用Pycharm进行Debuge设置
    Scrapy基础(三) ------xpath基础
    Scrapy基础(二)————Scrapy的安装和目录结构
    python基础一 ------Python 的编码
    Scrapy基础(一) ------学习Scrapy之前所要了解的
  • 原文地址:https://www.cnblogs.com/feiyudemeng/p/8394651.html
Copyright © 2020-2023  润新知