垃圾回收器

一、垃圾回收器的三种类型

1.串行

  1. 单线程执行:所有的垃圾回收工作都由单个线程完成,即在进行垃圾回收时,应用程序的其他所有线程都会停止。
  2. 简单而高效:由于单线程执行,实现上相对简单,适用于小型或中小型的应用程序。
  3. 停顿时间长:由于垃圾回收时会停止应用程序的所有线程,可能导致较长的停顿时间,不适合对响应时间要求严格的应用。
  4. 适用场景:通常用于开发、测试和小型应用的部署,或者作为学习和理解垃圾回收机制的起点。

开启参数:-XX:+UseSerialGC=Serial+SeriakOld(新时代标记复制,老年代标记整理,两个可以同时进行)

2.吞吐量优先

  1. 批量处理:将多个小任务合并成一个大任务进行处理,可以减少每个任务的开销,提高吞吐量。例如,在数据库操作中,批量插入数据通常比逐行插入数据的吞吐量更高。
  2. 增加并行度:通过并行处理多个任务来增加系统的吞吐量。例如,使用线程池来并发处理多个请求。
  3. 高效的资源利用:将任务均匀分布到各个资源单元(如服务器、CPU核心)上,以防止某些资源单元过载,提高整体系统的吞吐量。
  4. 适用场景:吞吐量优先策略适用于那些对响应时间不太敏感但需要处理大量数据或长时间运行的应用,如批处理系统、大数据处理等。

垃圾回收方式于串行相似只是使用了多线程进行处理

3.响应时间优先

3.1CMS 流程概述

  1. 初始标记(Initial Mark)
    • 目的:标记根对象(即应用程序可直接访问的对象)。
    • 特点:这一步骤会停顿应用程序的执行(STW,Stop-The-World),因为需要确保在标记期间对象的引用关系是稳定的。
  2. 并发标记(Concurrent Mark)
    • 目的:遍历并标记从根对象可达的所有对象。
    • 特点:此阶段在应用程序运行时进行,即在不暂停应用程序的情况下进行标记工作。垃圾回收线程与应用程序线程并发工作,标记堆中的对象。
  3. 重新标记(Remark)
    • 目的:纠正并发标记阶段期间发生的对象变化(如对象的引用关系变动)。
    • 特点:这一步骤会再次停顿应用程序的执行,以确保准确标记所有可达对象。
  4. 并发清除(Concurrent Sweep)
    • 目的:清除未被标记的垃圾对象,回收堆内存。
    • 特点:此阶段与应用程序线程并发进行,尽量减少停顿时间,清除垃圾对象并释放内存。

3.2GC参数

  • **-XX:+UseCMSInitiatingOccupancyOnly**:只根据设定的阈值触发垃圾回收,避免动态调整。
  • **-XX:+UseConcMarkSweepGC**:启用 CMS 垃圾回收器。
  • **-XX:CMSInitiatingOccupancyFraction**:设置触发 CMS 垃圾回收的堆内存占用阈值。
3.2.1注意事项
  • 第一次初始标记时会短时间阻塞其他线程并对根对象进行标记。
  • 重新标记是因为并发标记时程序在运行产生会产生垃圾。
  • 并发清理时程序也在运行产生垃圾,这些垃圾会留到下一次垃圾回收。
    并发标记时程序在运行产生会产生垃圾。
  • 并发清理时程序也在运行产生垃圾,这些垃圾会留到下一次垃圾回收。
  • 因为CMS是一种标记清除的方法,会产生内存碎片,当碎片过多时垃圾回收器会退化为SerialOld进行串行的垃圾回收。
相关推荐
JAVA面经实录9178 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午10 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
2401_8323655210 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
Bat U11 小时前
JavaEE|多线程初阶(七)
java·开发语言
2301_7796224111 小时前
Go语言怎么用信号量控制并发_Go语言semaphore信号量教程【入门】
jvm·数据库·python
2301_7662834411 小时前
c++如何将控制台输出保存到文件_cout重定向到txt【详解】
jvm·数据库·python
掌心向暖RPA自动化13 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭13 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev14 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手14 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试