你还不懂jvm垃圾回收及收集器么?(代码片段)

守夜人爱吃兔子 守夜人爱吃兔子     2022-12-19     277

关键词:

Serial收集器

  • 这个收集器是一个单线程工作的收集器,但它的“ 单线 程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,
  • 更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。

ParNew收集器

  • ParNew收集器实质上是Serial收集器的多线程并行版本

==收集器中的并发与并行==

  • 并行(Parallel):并行􏰀述的是多条垃圾收集器线程之间的关系
  • 说明同一时间有多条这样的线 程在协同工作,通常默认此时用户线程是处于等待状态。
  • 并发(Concurrent):并发􏰀述的是垃圾收集器线程与用户线程之间的关系
  • 说明同一时间垃圾 收集器线程与用户线程都在运行。由于用户线程并未被冻结,所以程序仍然能响应服务请求,但由于 垃圾收集器线程占用了一部分系统资源,此时应用程序的处理的吞吐量将受到一定影响。

Parallel Scavenge收集器

  • 基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器
  • 供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis参数
  • 以及直接设置吞吐量大小的-XX:GCTimeRatio参数。

Serial Old收集器

  • Serial Old是Serial收集器的老年代版本,
  • 它同样是一个单线程收集器,使用标记-整理算法

Parallel Old收集器

  • Parallel Old是Parallel Scavenge收集器的老年代版本
  • 支持多线程并发收集,基于标记-整理算法实现。

CMS

  • 以获取最短回收停顿时间为目标的收集器

==四个步骤==

  1. 初始标记(CMS initial mark)
  2. 并发标记(CM S concurrent mark)
  3. 重新标记(CM S remark)
  4. 并发清除(CMS concurrent sweep)

==优点==

  • 并发收集、低停顿

==缺点==

  • 它虽然不会导致用户线程停顿,但却会因为占用了一部分线程而导致应用程序变慢,降低总吞吐量
  • 在CMS的并发标记和并发清理阶段,用户线程是还在继续运行的,
  • 程序在运行自然就还会伴随有新的垃圾对象不断产生,但这一部分垃圾对象是出现在标记过程结束以后,
  • CMS无法在当次收集中处理掉它们,只好留待下一次垃圾收集 时再清理掉。这一部分垃圾就称为“ 浮动垃圾”

Garbage First收集器

  • 遵循分代收集,开创的基于Region的堆内存布局是它能够实现这个目标的关键
  • 初始标记(Initial Marking):仅仅只是标记一下GC Roots能直接关联到的对象,并且修改TAMS 指针的值,让下一阶段用户线程并发运行时,能正确地在可用的Region中分配新对象。这个阶段需要 停顿线程,但耗时很短,而且是借用进行Minor GC的时候同步完成的,所以G1收集器在这个阶段实际 并没有额外的停顿。
  • 并发标记(Concurrent Marking):从GC Root开始对堆中对象进行可达性分析,递归扫􏰁整个堆 里的对象图,找出要回收的对象,这阶段耗时较长,但可与用户程序并发执行。当对象图扫􏰁完成以后 , 还要重新处理SATB记录下的在并发是引用的并发对象
  • 最终标记(Final Marking):对用户线程做另一个短暂的暂停,用于处理并发阶段结束后仍遗留 下 来 的 最 后 那 少 量 的SATB记录 。
  • 筛选回收(Live Data Counting and Evacuation):负责更新Region的统计数据,对各个Region的回 收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择任意多个Region 构成回收集,然后把决定回收的那一部分Region的存活对象复制到空的Region中,再清理掉整个旧 Region的全部空间。这里的操作涉及存活对象的移动,是必须暂停用户线程,由多条收集器线程并行 完成的。

 最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。

对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一些学习资料

需要的小伙伴,可以一键三连,点击这里获取免费领取方式

《Java核心知识点合集(283页)》

内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等

《Java中高级核心知识点合集(524页)》

《Java高级架构知识点整理》

《Docker从入门到实践》

《spring could 学习笔记》

《JVM与性能调优知识点整理》

《MySQL性能调优与架构设计解析文档》305页

《Nginx入门到实战》319页

《Java并发编程》385页

《1000道 互联网Java工程师面试题 (485页)》

需要的小伙伴,可以一键三连,点击这里获取免费领取方式 

jvm垃圾回收篇(经典垃圾回收器讲解)(代码片段)

经典垃圾回收器讲解1.Serial垃圾收集器2.ParNew垃圾收集器3.Parallel垃圾收集器4.CMS垃圾收集器5.G1垃圾收集器1.基本介绍2.四大特性3.不足之处4.参数设置5.适用场景6.什么是Region?7.什么是记忆集?8.G1回收过程9.G1回收详细步骤6.... 查看详情

jvm垃圾回收篇(经典垃圾回收器讲解)(代码片段)

经典垃圾回收器讲解1.Serial垃圾收集器2.ParNew垃圾收集器3.Parallel垃圾收集器4.CMS垃圾收集器5.G1垃圾收集器1.基本介绍2.四大特性3.不足之处4.参数设置5.适用场景6.什么是Region?7.什么是记忆集?8.G1回收过程9.G1回收详细步骤6.... 查看详情

jvm中的垃圾回收器及垃圾收集算法描述(代码片段)

...先需要了解下JVM(Java虚拟机)中的内存分配情况: 收集器的介绍:Serial收集器:是最原始的收集器,是单线程的,实现简单,但是在后台收集垃圾的时候,其他的工作线程都会停止,直到垃圾收集线程执行完毕,给用户的... 查看详情

jvm垃圾回收算法与垃圾收集器(代码片段)

垃圾回收算法与垃圾收集器1.垃圾收集算法1.1标记清除算法1.1.1基本概念1.1.1.1`mutator`和`collector`1.1.1.2`mutatorroots`(`mutator`根对象)1.1.1.3可达对象1.1.2垃圾回收过程1.1.2.1标记(mark)1.1.2.2清除(sweep)1.1.2.3整体流程1.1 查看详情

jvm之垃圾收集算法与垃圾收集器(代码片段)

Java垃圾收集算法与垃圾收集器1.垃圾收集的经典四连问1.1.什么是垃圾?1.2.为什么要垃圾回收?1.3.垃圾什么时候回收?1.4.垃圾如何回收?2.垃圾回收的相关概念2.1System.gc()的理解2.2内存溢出与内存泄漏2.3StopTheWorld2.4垃圾... 查看详情

谈谈jvm垃圾回收机制及垃圾回收算法(代码片段)

...(ReferenceCountingCollector)1.1算法分析   引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象实例分配给一个变量,该变量计数设置为1。当任何其它变量... 查看详情

jvm垃圾回收篇(垃圾回收算法)(代码片段)

垃圾回收算法1.垃圾回收的两个阶段2.垃圾标记算法之引用计数算法3.垃圾标记算法之可达性分析法4.垃圾清除算法之标记清除算法5.垃圾清除算法之复制算法6.垃圾清除算法之标记压缩算法7.垃圾清除算法总结8.其它收集算法1.分代... 查看详情

jvm专题-垃圾回收(代码片段)

文章目录1.垃圾回收器分类1.1.串行1.2.吞吐量优先1.3.响应时间优先1.垃圾回收器分类相关概念:并行收集:指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态并发收集:指用户线程与垃圾收集线程同时... 查看详情

jvm垃圾回收篇(扩展知识)(代码片段)

...圾收集日志分析示例3.垃圾收集日志分析工具4.现代垃圾收集器发展1.垃圾收集日志分析参数-XX:+PrintGC用于输出简要的GC日志信息GC、FullGC代表GC的类型AllocationFailure代表GC触发的原因,这里是由于空间不足分配失败导致的GC153... 查看详情

jvm垃圾回收篇(扩展知识)(代码片段)

...圾收集日志分析示例3.垃圾收集日志分析工具4.现代垃圾收集器发展1.垃圾收集日志分析参数-XX:+PrintGC用于输出简要的GC日志信息GC、FullGC代表GC的类型AllocationFailure代表GC触发的原因,这里是由于空间不足分配失败导致的GC153... 查看详情

jvm04——七个gc垃圾收集器(代码片段)

...法。JVM中针对新生代和年老代分别提供了多种不同的垃圾收集器。根据线程特点,可以将收集器分为三类:串行收集器:Serial收集器、SerialOld收集器;//串行收集器开启方式-XX:+UseSerialGC并行收集器:ParallelSc 查看详情

jvm内存结构和垃圾回收(代码片段)

...代JVM结构总结Java8新变化垃圾回收永久代的垃圾回收垃圾收集器前言在做性能测试之前,首先我们需要了解JVM的内存结构和垃圾回收机制。只有了解了JVM的底层原理,这样才能帮助我们后期更好的进行性能测试和调优。Jav... 查看详情

jvm之垃圾回收器(代码片段)

1、GC分类与性能指标1.1、垃圾回收器概述垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度... 查看详情

直通bat必考题系列:7种jvm垃圾收集器特点,优劣势及使用场景

...,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。常见的垃圾收集器有3类:1.新生代的收集器包括:SerialPraNewParallelScavenge2.老年代的收集器包括:Ser 查看详情

直通bat必考题系列:7种jvm垃圾收集器特点,优劣势及使用场景

...,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。常见的垃圾收集器有3类:1.新生代的收集器包括:SerialPraNewParallelScavenge2.老年代的收集器包括:Ser 查看详情

jvm垃圾收集算法的选择

1.介绍JVM提供了多种垃圾收集器,应该根据应用选择一种合适的垃圾收集器。垃圾回收管理内存通过如下操作:  在年轻代分配对象,把年龄大的对象晋升到老年代。  当年老代超过阈值的时候,并发标记收集。  通过合... 查看详情

jvm之垃圾回收概述和相关算法(代码片段)

1、垃圾回收概述Java和C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用... 查看详情

直通bat必考题系列:深入剖析jvm之g1收集器及回收流程与推荐用例

...结,以及今天重点谈到的JVM垃圾回收算法的实现:JVM垃圾收集器。我先从JVM收集器的发展过程谈起,然后再聚焦在G1收集器,从G1的内存模型,再到G1的回收流程,最后再谈谈G1的实际应用场景。JVM垃圾收集器发展历程JVM垃圾 查看详情