当前位置: 首页 > news >正文

深入理解JVM垃圾收集器

相关系列

深入理解JVM垃圾收集算法-CSDN博客

目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的,从上图可以看到有连线的的垃圾收集器是可以组合使用,是年轻代+老年代。为什么会出现这么多的垃圾收集器?因为,直到现在也没有最好的垃圾收集器出现,更没有万能的垃圾收集器,只能按照使用场景来选择适合的垃圾收集器。如果存在完美的垃圾收集器,那到JAVA虚拟机就不会实现这么多不同的垃圾收集器。

Serial收集器

jvm参数: -XX:UseSerialGC -XX:+UseSerialOldGC

Serial(串行)收集器是最早的垃圾收集器。看这个名字翻译成中文就是“单线程”收集器了。通过单线程去完成垃圾收集器,更重要在收集过程,必须暂停其它所有的工作线程(Stop The World),直至它收集结束。 新生代采用“复制”算法,老年代采用标记-整理算法。

Serial收集器的优点简单高效(与其它收集器的单线程相比)。Serial收集器由于没有线程交互的开销,自然可以获得很高的单线程收集效率。

Serial Old收集器是Serial收集器的对应的老年代版本,这也是一个单线程收集器。它有二个用途:一种用途是在JDK1.5以及以前的版本中与Parallel Scavenge收集器配合使用,另外一种用途是做为CMS收集器的后备方案。

Parallel Scavenge收集器

jvm参数配置:-XX:UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代))

Parallel Scavenge收集器是Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为(控制参数、收集算法、回收策略等)和Serial收集器类似。默认的收集线程数跟CPU核数相同,当然也可以用参数(-XX:ParallelGCThreads)指定收集的线程数,但是一般不推荐修改。

Parallel Old收集器是Parallel Scavenge收集器的老年代版本。使用多线程和"标记-整理"算法。在注意吞吐量以及CPU资源的场合,都可以优先考虑Parallel Scavenge收集器和Parallel Old收集器.(JDK8默认的新生代和老年代收集器)。

ParNew收集器

 jvm参数设置:-XX:+UseParNewGC

ParNew收集器其实跟Parallel收集器很类似,区别主要在于它可以和CMS收集器配置使用。新生代采用“复制”算法。

在大部分场景下,ParNew是虚拟机的首要选择,除了Serial收集器外,只有它与CMS收集器配合工作。

CMS收集器

jvm参数配置:-XX:+UseConcMarkSwwepGC(old)

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。它是HotSpot虚拟机推出的第一款真正意义上的并发收集器,经第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。

CMS收集器是一种“标记-清除”算法实现。分五个步骤:

初始标记:暂停所有的其它线程(STW),并记录下gc roots直接能引用的对象,速度很快。

并发标记:并发标记阶段从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但不需要停顿用户线程,可以与垃圾收集线程一起并发运行。因为用户程序继续运行,可能会导致已经标记过的对象状态发生改变。

重新标记:修正并发标记阶段因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录。

并发清理:开启用户线程,同时GC线程开始对未标记的区域做清扫。这个阶段如果有新增对象会被标记为黑色不做处理。

并发重置:重置本次GC过程中的标记数据

优点:并发收集,低停顿

缺点:

  • 对cpu资源敏感
  • 无法处理浮动垃圾(在并发标记和清理阶段又产生垃圾,这种浮动垃圾只能等到下一次再清理了)
  • 使用“标记-清除”算法导致在收集完成时会产生大量空间碎片
  • 执行过程中不确定性,会存在上次垃圾回收还没有回收完,然后垃圾回收又被触姝情况,特别是并发标记和并发清理阶段会出现,同时在回收,系统同时也在运行,有可能还没有回收完就再次触发full gc,也就是"concurrent mode failure",此时会进行stop the world ,用Serial old垃圾收集器来回收

相关文章:

深入理解JVM垃圾收集器

相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的,从上图可以看到有连线的的垃圾收集器是可以组合使用,是年轻代老年代…...

macU盘在电脑上读不出来 u盘mac读不出来怎么办 macu盘不能写入 Tuxera NTFS for Mac免费下载

对于Mac用户来说,使用U盘是很常见的操作,但有时候可能会遇到Mac电脑无法读取U盘的情况,这时候就需要使用一些特定的工具软件来帮助我们解决问题。本文就来告诉大家macU盘在电脑上读不出来是怎么回事,u盘mac读不出来怎么办。 一、m…...

448.找到所有数组中消失的数字(原地修改)

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums [4,3,2,7,8,2,3,1] 输出:[5,6] 原地修改 …...

Redis学习从入门到掌握(基础篇)

文章目录 一、初识Redis1.认识 Redis2.Redis常见命令(1)Redis 数据结构介绍(2)Redis 通用命令(3)String 类型(4)String 类型的常见命令(5)Hash 类型&#xff…...

redis主从复制、哨兵

目录 1. 主从复制 特点: 工作原理: 配置: 2. 哨兵 特点: 工作原理: 配置: ​编辑 1. 主从复制 特点: 主从复制是 Redis 最基本的高可用性方案。主节点(Master&#xff09…...

uniapp登录拦截白名单使用

1、创建uni.promisify.adaptor.js文件 // 根目录新建 uni.promisify.adaptor.js // 路由白名单 const list [/, /pages/stroke/stroke]; //创建路由拦截,这里只判断一般跳转 uni.addInterceptor(switchTab, {invoke(res) {console.log(res);//存在token就跳转if (…...

力扣45. 跳跃游戏 II

Problem: 45. 跳跃游戏 II 文章目录 题目描述思路复杂度Code 题目描述 思路 1.获取数组的长度len,定义int类型变量end用于标记每次在当前可以跳到的最远距离,farthest用于记录每次可以跳跃到的最远距离,jumps用于记录最小的跳跃次数&#xff…...

MXNet安装:专业指南与深度解析

一、引言 MXNet是一个高效且灵活的深度学习框架,它支持多种编程语言和平台,并提供了丰富的深度学习算法和工具。随着深度学习技术的广泛应用,MXNet因其出色的性能和易用性受到了越来越多开发者和研究人员的青睐。本文将详细介绍MXNet的安装过…...

C++函数模板案例--数组封装

目录 一、数组封装的需求 案例描述: 二、实操 创建.hpp文件,编写数组类。 浅拷贝危害 拷贝构造函数 “”重载 尾插法 尾删法 “[]"重载 返回数组容量、大小 完整代码 编写.cpp文件,对自定义数组进行测试。 打印数组函数 test01测试函数…...

传统文字检测方法+代码实现

文章目录 前言传统文字检测方法1、基于最大稳定极值区域(MSER)的文字检测1.1 MSER(MSER-Maximally Stable Extremal Regions)基本原理代码实现——使用Opencv中的cv2.MSER_create()接口 2、基于笔画宽度变换(Stroke Wi…...

Jmeter从数据为查找结果集数据方法随笔

一、Jmeter连接数据库 1.下载对应数据库的驱动包到jmeter安装目录的lib下ext文件中,并导入到jmeter的测试计划中,本实例中使用的是mysql如下所示: 点击测试计划–>点击浏览–>选中mysql驱动jar包–>打开 2.添加线程组,…...

Objective-C网络请求开发的高效实现方法与技巧

前言 在移动应用开发中,网络请求是一项至关重要的技术。Objective-C作为iOS平台的主要开发语言之一,拥有丰富的网络请求开发工具和技术。本文将介绍如何利用Objective-C语言实现高效的网络请求,以及一些实用的技巧和方法。 1.Objective-C技…...

Java:OOP之术语或概念

■■ 编程和程序设计 ■□ 程序员和编程■ 程序员:programmer■ 编程:program, programming■ 面向过程:Process oriented■ 面向对象:object-oriented● 面向对象分析:OOA,全称Object-oriented Analysis●…...

内存地产风云录:malloc、free、calloc、realloc演绎动态内存世界的楼盘开发与交易大戏

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 在这个波澜壮阔的内存地产世界中,malloc、free、calloc和realloc四位主角,共同演绎着一场场精彩绝伦的楼盘开…...

个人博客项目笔记_05

1. ThreadLocal内存泄漏 ThreadLocal 内存泄漏是指由于没有及时清理 ThreadLocal 实例所存储的数据,导致这些数据在线程池或长时间运行的应用中累积过多,最终导致内存占用过高的情况。 内存泄漏通常发生在以下情况下: 线程池场景下的 ThreadL…...

基础知识点全覆盖(1)

Python基础知识点 1.基本语句 1.注释 方便阅读和调试代码注释的方法有行注释和块注释 1.行注释 行注释以 **# **开头 # 这是单行注释2.块注释 块注释以多个 #、三单引号或三双引号(注意: 基于英文输入状态下的标点符号) # 类 # 似 # 于 # 多 # 行 # 效 # 果 这就是多行注释…...

异常处理java

在Java中,异常处理可以使用"throws"关键字或者"try-catch"语句。这两种方法有不同的用途和适用场景。 "throws"关键字: 在方法声明中使用"throws"关键字,表示该方法可能会抛出异常,但是并不立即处理…...

个人博客项目_09

1. 归档文章列表 1.1 接口说明 接口url:/articles 请求方式:POST 请求参数: 参数名称参数类型说明yearstring年monthstring月 返回数据: {"success": true, "code": 200, "msg": "succ…...

【2024年MathorCup数模竞赛】C题赛题与解题思路

2024年MathorCup数模竞赛C题 题目 物流网络分拣中心货量预测及人员排班背景求解问题 解题思路问题一问题二问题三问题四 本次竞赛的C题是对物流网络分拣中心的货量预测及人员排班问题进行规划。整个问题可以分为两个部分,一是对时间序列进行预测,二是对人…...

蓝桥杯省赛冲刺(3)广度优先搜索

广度优先搜索(Breadth-First Search, BFS)是一种在图或树等非线性数据结构中遍历节点的算法,它从起始节点开始,按层级逐步向外扩展,即先访问离起始节点最近的节点,再访问这些节点的邻居,然后是邻…...

如何通过离线语音输入提升Android设备的文字录入效率

如何通过离线语音输入提升Android设备的文字录入效率 【免费下载链接】Sayboard An open-source on-device voice IME (keyboard) for Android using the Vosk library. 项目地址: https://gitcode.com/gh_mirrors/sa/Sayboard 在智能手机普及的今天,文字输…...

企业生产环境怎么正确做 Vibe Coding:不是让 AI 接管,而是把交付流程做成可控系统

这两年,vibe coding 很热。很多团队第一次接触它时,直觉都是:既然 AI 会写代码,那就让它多写一点,人少管一点,速度自然就上来了。 但一进企业生产环境,这种想法通常很快撞墙。 因为企业真正关心…...

Fish-Speech-1.5开源模型的企业级部署架构设计

Fish-Speech-1.5开源模型的企业级部署架构设计 如果你正在考虑将Fish-Speech-1.5这个强大的语音合成模型引入到自己的业务中,比如做个智能客服、有声书平台,或者给产品加个语音播报功能,那你肯定不能只满足于在本地电脑上跑个Demo。一旦涉及…...

iOS激活锁绕过终极指南:快速解锁iPhone/iPad的完整解决方案

iOS激活锁绕过终极指南:快速解锁iPhone/iPad的完整解决方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当你面对一部显示"激活锁"界面的iOS设备,反复输入Apple I…...

3分钟搞定!Windows 11 LTSC 24H2微软商店终极安装指南

3分钟搞定!Windows 11 LTSC 24H2微软商店终极安装指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否正在使用Windows 11 24H2 LTS…...

深度解析:Beyond Compare 5授权机制与密钥生成技术

深度解析:Beyond Compare 5授权机制与密钥生成技术 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在软件授权领域,Beyond Compare 5的RSA加密授权系统展现了商业软件保护…...

突破软件授权限制:基于注册表权限控制的持久化使用方案——以下载工具为例

突破软件授权限制:基于注册表权限控制的持久化使用方案——以下载工具为例 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 一、场景痛点:…...

3步颠覆传统性能管理:让你的华硕笔记本效能提升40%

3步颠覆传统性能管理:让你的华硕笔记本效能提升40% 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: …...

Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析

Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析 1. 像素时装锻造坊简介 像素时装锻造坊是一款融合了复古游戏美学与现代AI技术的图像生成工具。它基于Stable Diffusion和Anything-v5模型构建,专为时尚设计和像素艺术创作而…...

RS485接口EMC设计与防护电路实现

RS485接口电路的EMC设计与工程实现1. 项目概述1.1 RS485接口的EMC挑战RS485作为工业通信标准接口,其典型应用场景中信号走线常与电源线、功率信号线混合布线,导致以下EMC问题:共模干扰通过长距离传输线耦合浪涌脉冲对接口电路的冲击损坏高频噪…...