热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java+垃圾回收器+的功能_JAVAJVM垃圾回收器

分代收集:新生代(复制算法),老年代(标记清除,标记整理)、jps-v可查看当前JVM使用的是那种垃圾收集器垃圾回收器又分单线程多线程&#

分代收集:新生代(复制算法),老年代(标记清除,标记整理) 、

jps -v 可查看当前JVM 使用的是那种垃圾收集器

垃圾回收器又分单线程多线程,使用。

常见的垃圾回收器如下图:垃圾回收器的连线表示搭配使用的意思,不同的颜色表示不同的算法(3种)

使用标记清除的只有CMS 一种垃圾回收器

G1是独立使用的,并且可以跨代回收。(JDK1.7之后出的)

多线程的垃圾回收器:多线程收集,也就是并行;多线程收集和多线程的应用同时进行,也就是并发;

垃圾收集器的连线是组合使用的意思,不同的字体颜色代表不同的垃圾回收算法;

25c763886e78b0501f2aefa1c22abb3e.png

单线程回收器:

Serial/Serial old: 最古老,独占式,成熟,适合单CPU服务器

多线程回收器:

ParNew:与 Serial 没什么区别,唯一的区别就是多线程收集,多cpu,停顿时间较Serial少

除了性能原因之外,在新生代除了Serial,就只有ParNew能与CMS收集器配合使用

Parallel Scavenge(Paraller GC) /Parallel Old: 关注吞吐量的垃圾收集器,高吞吐量可以高效的利用cpu时间,尽快的完成运算任务,

主要适合后台运算不太需要交换的任务。

所谓的吞吐量:吞吐量=运行代码的时间(99分钟)/(运行代码的时间(99分钟)+垃圾回收的时间(1分钟)),

99%=99(分钟)/(99分钟+1分钟),吞吐量为99%;

垃圾回收器组合:

-XX:+UseSerialGC 新生代和老年代串行收集器(Serial+Serial Old)

-XX:+UseParNewGC 新生代使用 ParNew,老年代使用 Serial Old

-XX:+UseParallelGC 新生代使用Parallel Scavenge,老年代使用 Parallel Old

简单垃圾收集器的工作原理:

374fea09404c06d4ca613d74f052ad48.png

重点关注两种垃圾收集器:CMS,G1(G First)

CMS(Concurrent Mark Sweep) :CMS是基于标记清除算法,以及并行和并发收集的回收器;

过程大概如下:初始标记(暂停所有线程)--》并发标记(时间长)--》重新标记--》并发清除(时间长)--》重置线程

初始标记:仅仅是标记GC Roots 判断对象是否可达,速度快,需要暂停所有线程(Stop the World)

并发标记:从GC Roots 开始对堆中的对象进行可达性分析,找到存活对象,整个生命周期中耗时最长,不需要停顿

重新标记:为了修正并发标记期间用户对程序产生的对象的变化的标记,需要停顿,这个时间比初始标记要长,比并发要短

并发清除:垃圾开始回收,不需要停顿

364429668917a7262e27434240388508.png

优点:由于耗时最长的并发标记和并非清理都是和用户线程一起进行的,所以总体上CMS给人的感觉就是没停顿;

缺点: CPU要求高,因为并发是占用量资源的;

标记清除算法导致的垃圾碎片,

并发标记会产生浮动垃圾, 需要等下一次垃圾回收来清理,占用内存,需要预留一部分空间来存放浮动垃圾;

G1(Garbage-First)垃圾回收器:基于复制和标记整理算法的并行,并发收集器;(Global Concurrent Marking)

一般要求cup内存空间足够大,内存过小不建议用,失败会启用FullGC(serial Old)

过程大概如下:初始标记(暂停所有线程)--》并发标记---》最终标记(暂停所有线程)--》筛选回收

初始标记:仅仅标记一下GC Roots 能直接关联到的对象,需要停顿,耗时短

并发标记:进行可达性分析,找到存活对象,耗时长,与用户线程同时进程

最终标记:为了修正用户并发标记期间对标记对象产生变化的那一部分对象记录,需要停顿

筛选回收:首先对各个Region中的回收价值和成本进行排序(后台维护了优先序列表),

根据用户所期望的停顿时间来制定回收计划

此阶段是可以跟用户线程并发进行的,因为只回收一部分Region ,所以时间可控

而且停顿用户线程将大幅度提高效率

d7209f8559aa04fc7c6b541cc9506635.png

特点:   内存布局发生了改变

空间整合,不会产生内存碎片

化整为零,分而治之,可预测的停顿(默认200ms),可根据用户设定的回收时间来提供回收方案

比如:100g 内存,分成10份,每份就是10g(G First 的意思就是急需回收的意思)

158e110e58f740009f085dc8eb4b408c.png

模式:

Young GC:主要对Eden区Survivor区(Form,To)进行回收

Mixed GC:Survivor区与Old区,Humongous (大对象)

G1主要参数配置:

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

-XX:G1HeapRegionSize = n ,设置每个Region 的大小,并非最终

-XX:MaxGCPauseMillis    ,设置G1收集过程目标时间,默认是200ms,不是硬性条件

-XX:G1NewSizePercent,    新生代最小值,默认是5%

-XX:G1MaxNewSizePercent, 新生代最大值,默认是60%

-XX:ParallelGCThreads  ,STW 期间,并行GC的线程数

-XX:ConcGCThreads = n, 并发标记阶段,并行执行的线程数

-XX:InitiatingHeapOccupancyPercent 设置触发标记周期的Java堆占用阈值。默认值是45%,

这里的java堆占比值得是non_young_capacity_bytes,包括old+humongous

垃圾回收器的重要参数(使用-XX:):

cc2e9a08c76b92fefb2ac2c48ea8b4ba.png



推荐阅读
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • JVM:33 如何查看JVM的Full GC日志
    1.示例代码packagecom.webcode;publicclassDemo4{publicstaticvoidmain(String[]args){byte[]arr ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 这篇文章主要讲解了“如何应对Android面试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何应对 ... [详细]
author-avatar
WINNIE双双围脖_370
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有