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

小研究 - JVM 垃圾回收方式性能研究(二)

本文从几种JVM垃圾回收方式及原理出发,研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响,并通过最终测试数据对比,给出了不同应用场景下如何选择垃圾回收策略的方法。

目录

3 几种垃圾回收器

3.1 串行回收器

3.2 并行回收器

3.3 CMS回收器

3.4 G1回收器

3.5 Z回收器

4 垃圾回收器性能比较


3 几种垃圾回收器

垃圾收集算法可以看作 Java 虚拟机内存回收的抽象策略,而垃圾收集器则是其内存回收的具体实现。Java 虚拟机中,垃圾回收器不只一种,在不同的应用场景下如何选择性能最佳的垃圾回收器 是需要有清楚认识的,下面介绍几种常见的垃圾回收器。

3.1 串行回收器

串行回收器是一种单线程垃圾回收器,在进行每次垃圾回收时,只有一个线程工作,Java 应用程序中的其他所有线程暂停,等待垃圾回收完成(“Stop-The-World”过程)。在实时性要求高的应用 场景下,往往会造成用户体验不佳。串行回收器在新生代中使用复制算法,老年代中使用标记压缩法。

3.2 并行回收器

并行回收器在串行回收器的基础上做了改进,它使用多个线程同时进行垃圾回收,可以有效减少垃圾回收所需的时间。新生代中使用复制算法,老年代使用标记压缩算法。并行回收器关注系统的吞吐量,可以通过 -XX:MaxGCPauseMills 和 -XX:GCTimeRatio 控制的垃圾回收最大停顿时间和吞吐量。但须指出的是,减少一次收集的最大停顿时间,就会同时减少系统吞吐量,增大系统吞吐量又可能会同时增加一次垃圾回收的最大停顿时间。

3.3 CMS回收器

CMS回收器使用标记清除算法,利用多线程并行回收,侧重于系统停顿时间。CMS工作时首先经过初始标记与并发标记来标记出需要回收的对象、通过预清理做清理前的准备及控制停顿时间、再经过重新标记修正并发标记的数据、最后进行并发清除,以及并发重置为下次回收做准备 。

3.4 G1回收器

G1 回收器可以视为 CMS 回收器的替代品,它使用了独特的分区算法,相比于之前介绍的垃圾回收器将堆内存划分为固定内存大小的年轻代、老代和永久代(JDK1.8 后被元空间取代),G1 回收器将堆分割成一组大小相等的区域,每个区域是一个连续的虚拟内存范围,某些区域被功能与年轻代老年代相同,但是它们没有固定的大小,这为内存使用提供了更大的灵活性。在进行垃圾回收时, G1 回收器可以只选择部分区域,且部分垃圾回收工作能与 Java 应 用程序并行,提高回收效率的同时相应降低停顿时间。G1 回收器虽然也使用标记清除法,但与 CMS 不同的是 G1 可以有效复制移动对象,消除了潜在的内存碎片问题。此外,G1 还允许用户自行设定所需的暂停时间。

3.5 Z回收器

ZGC 是从 JDK11 中引入的一种新的支持弹性伸缩的低延迟垃圾收集器,主要实现了三大目标:停顿时间不超过 10ms、停顿时间不随堆或实时设置的大小而增加、支持从 8MB 到 16TB 的堆内存。ZGC的一个核心设计原则是使用读屏障(load barrier)和着色指针 (colored pointer)。在 Java 中加载对象的行为会受到读屏障的影响,而着色指针具有供读屏障使用的信息,它使 ZGC 能够查找、标记、定位和重新映射对象,这有助于降低垃圾回收的开销并极大降低停顿时间,且对吞吐量影响最大不超过 15%。作为一个并发的垃圾收集器,ZGC 所有的工作都是在 Java 应用程序线程执行时完成的,这极大地减少了垃圾回收对应用程序响应时间的影响。而且 Z 回收器现在还处于持续开发阶段,后续的开发目标是达到垃圾回收停顿时间不超过 1ms。

4 垃圾回收器性能比较

SPEC jbb2015 测试模拟了一个典型的商业应用的三层架构环境 中的中间层工作,包含商业逻辑、对象操作等,目的是衡量服务器 Java 应用之性能。模型建立在一个全球型连锁超市的 IT 基础架构 之上,通过线上线下购物、库存管理、供应链管理、用户购买行为的数据挖掘等业务来评估整个系统的吞吐量及响应时间随着整个系统业务量不断增加时的性能表现。SPECjbb2015 支持多种测试运行配置、支持虚拟化以及云环境,使用户能够全面分析和解决可能 存在于包括硬件、操作系统、JVM 和应用程序层的性能瓶颈问题。

SPEC jbb2015 测试结果包含主要包含两个测试指标 Max-jOPS 和 Critical-jOPS。最大性能指标 Max-jOPS 是系统最大每秒钟处理的 Java 操作数,可以看做在业务响应不失败的情况下,服务器 的极限吞吐量,反映的是系统极限 Java 应用性能。关键性能指标 Critical-jOPS 是系统在 5 个关键 SLA(服务水平协议)10ms, 25ms,50ms,75ms 和 100ms 响应时间下平均每秒 Java 操作数。选择这些点是为了保证不同行业使用的响应时间目标的合理分布,可以看做衡量的是在响应时间有限的情况下的系统吞吐量。

相关文章:

小研究 - JVM 垃圾回收方式性能研究(二)

本文从几种JVM垃圾回收方式及原理出发,研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响,并通过最终测试数据对比,给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 3 几种垃圾回收器 3.1 串行回收器 3.2 并行回…...

【网络安全带你练爬虫-100练】第15练:模拟用户登录

目录 一、目标1:理清逻辑 二、目标2:将每一步用代码进行表示 三、网络安全O 一、目标1:理清逻辑 模拟登录的基本流程 1、进入入口程序 2、读取目标URL 3、请求加上线程 4、确定请求数据包 5、请求格式的确认 6、数据的处理与判断 二、目标…...

Ansible

Ansible 文章目录 Ansible一、概念1.简介2.特性 二、ansible模块1.命令行格式2.模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9.ping 模块10.yum 模块11.service/systemd 模块12.script 模块13.mount 模块14.archiv…...

kafka:消费者从指定时间的偏移开始消费(二)

我的前一篇博客《kafka:AdminClient获取指定主题的所有消费者的消费偏移(一)》为了忽略忽略掉上线之前的所有消息,从获取指定主题的所有消费者的消费偏移并计算出最大偏移来解决此问题。 但这个方案需要使用不常用的AdminClient类,而且如果该主题如果是第…...

Spring的加载配置文件、容器和获取bean的方式

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring配置文件和容器相关 一、加载properties文件1.1加载…...

(二)利用Streamlit创建第一个app——单页面、多页面

1 单页面app Step1:创建一个新的Python脚本。我们称之为uber_pickups.py。 Step2:在您喜爱的IDE或文本编辑器中打开uber_pickups.py,然后添加以下行: import streamlit as st import pandas as pd import numpy as npStep3&…...

一条sql查询语句在mysql中的执行过程是什么

mysql的连接器 我们想要在mysql中执行一条sql查询语句,首先需要连接到mysql服务,那么客户端首先要向mysql服务端发起连接请求,我们可以在客户端用mysql -h [ip] -P [port] -u 用户名 -p 密码 命令向服务端发起连接请求,这个连接请…...

网络互联究竟是需要什么协议相同,什么协议不同?

混淆概念的几个说法: 说法1: “以太网交换机不可以实现采用不同网络层协议的互联” 原因:以太网交换机是数据链路层的设备,不懂网络层的知识 说法2: “网桥可互联不同的物理层、不同的MAC子层以及不同速率的以太网”…...

ajax axios json

目录 一、ajax概述 1. 概念 2. 实现方式 (1)原生的JS实现方式(了解) (2) JQeury实现方式 二、axios 介绍 三、axios使用 1. axios 发送get/post请求 2. axios验证用户名称是否存在 四、json 1. …...

外观模式——提供统一入口

1、简介 1.1、概述 在软件开发中,有时候为了完成一项较为复杂的功能,一个类需要和多个其他业务类交互,而这些需要交互的业务类经常会作为一个完整的整体出现,由于涉及的类比较多,导致使用时代码较为复杂。此时&#…...

Vue中导入并读取Excel数据

在工作中遇到需要前端上传excel文件获取到相应数据处理之后传给后端并且展示上传文件的数据. 一、引入依赖 npm install -S file-saver xlsxnpm install -D script-loadernpm install xlsx二、在main.js中引入 import XLSX from xlsx三、创建vue文件 <div><el-uplo…...

CUDA常用函数

cudaDeviceSynchronize cudaDeviceSynchronize是一个CUDA函数&#xff0c;用于同步当前设备上的所有CUDA流。它会阻塞调用它的线程&#xff0c;直到所有设备上的CUDA流都执行完为止。这可以确保在进行后续的CUDA操作时&#xff0c;先前的操作已经完成。 在CUDA程序中&#xff0…...

72. ElasticSearch常用命令

索引管理 1新建索引 curl -XPUT http://10.42.172.35:9200/index012 读写权限 curl -XPUT -d {"blocks.read":false} http://10.42.172.35:9200/index01/_settings3 查看索引 单个 curl -XGET http://10.42.172.35:9200/index01/_settings多个 curl -XGET http…...

2023.7.26(同余方程的通解与特解)

Water(扩欧求特解与通解) 题意&#xff1a;给容量分别为A与B的水杯&#xff0c;问确切喝到C水的最小操作次数 有4种操作&#xff1a;选一杯全喝&#xff0c;选一杯全部倒掉&#xff0c;选一杯装满&#xff0c;将一杯的水尽量倒到另一杯中 思路&#xff1a;只有AxByC有解时才能确…...

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像&#xff08;图生图&#xff0c;img2img&#xff09;为例 学习前言源码下载地址网络构建一、什么是Stable Diffusion&#xff08;SD&#xff09;二、Stable Diffusion的组成三、img2img生成流程1、输入图片编…...

LangChain||什么是LangChain? LangChain有什么用?

从Auto-GPT说起&#xff1a; Auto-GPT可以调用本地电脑工具处理复杂信息;Auto-GPT可以围绕目标查阅资 料、“独立思考”、及时反馈、并 及时调整下一步操作…Auto-GPT的诞生&#xff0c;创造了大家 对“将LLM作为智慧大脑来高效 处理综合复杂任务”的想象;首次尝试串联大语言模…...

秋招算法备战第28天 | 93.复原IP地址、78.子集、90.子集II

93. 复原 IP 地址 - 力扣&#xff08;LeetCode&#xff09; 这个问题可以通过深度优先搜索(DFS)的方法来解决。我们要做的就是在字符串的每个可能位置插入点&#xff0c;然后检查生成的每一部分是否在 0-255 的范围内&#xff0c;以及是否没有前导零&#xff08;除非这一部分本…...

Mongodb空间索引的使用以及与Django的对接

Mongodb的空间索引 Mongodb数据库大家都非常熟悉&#xff0c;是一个基于分布式文件存储的开源数据库系统&#xff0c;在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能&#xff0c;数据结构由键值(key>value)对组成。MongoDB 文档类似于 JSON 对…...

Windows安装MySQL数据库

MySQL数据库安装 MySQL下载 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 可以选择下载msi或zip&#xff0c;以下为zip模式安装步骤 下载了mysql的zip安装包之后解压即可&#xff1b; Windows安装步骤 初始化MySQL&#xff0c;并记录生成的用户密码root的随机…...

聊聊函数式编程中的“式”

当谈到函数式编程的“式”时&#xff0c;通常指的是函数的组合、转换和应用&#xff0c;以及处理数据的方式和风格。在函数式编程中&#xff0c;式是用来构建程序逻辑的基本单元。 下面更详细解释函数式编程中的几个关键式&#xff1a; 函数的组合&#xff1a; 函数式编程中…...

nli-distilroberta-base入门教程:零基础理解自然语言推理任务

nli-distilroberta-base入门教程&#xff1a;零基础理解自然语言推理任务 1. 什么是自然语言推理&#xff1f; 自然语言推理&#xff08;Natural Language Inference&#xff0c;简称NLI&#xff09;是让计算机理解两段文本之间逻辑关系的任务。想象一下老师批改作业的场景&a…...

快速上手语音情感分析:Emotion2Vec+系统参数配置与结果解读

快速上手语音情感分析&#xff1a;Emotion2Vec系统参数配置与结果解读 1. 系统概述与核心价值 Emotion2Vec Large语音情感识别系统是一款基于深度学习的语音分析工具&#xff0c;能够自动识别语音中蕴含的情感状态。该系统由科哥团队基于阿里达摩院ModelScope平台的原始模型进…...

SiameseAOE模型多模态扩展探索:结合图像信息的属性抽取

SiameseAOE模型多模态扩展探索&#xff1a;结合图像信息的属性抽取 最近在做一个项目&#xff0c;需要从一堆产品说明书里自动提取技术参数。这些说明书五花八门&#xff0c;有的是纯文本PDF&#xff0c;有的则是图文混排&#xff0c;甚至有些关键参数就印在产品图片的标签上。…...

一文读懂:控制界的万能公式——PID算法到底是什么?

一文读懂:控制界的万能公式——PID算法到底是什么? 对于每一位踏入工科大门的学生或是初入职场的工程师来说,在自动控制、机器人、电子工程等领域,有一个名字几乎如影随形——PID算法。从天上飞的四轴无人机,到地上跑的平衡小车;从化工厂里庞大的反应釜,到你家中安静运转…...

Retinaface+CurricularFace模型在智能门禁系统中的实战应用

RetinafaceCurricularFace模型在智能门禁系统中的实战应用 1. 引言 想象一下这样的场景&#xff1a;每天早晨上班高峰期&#xff0c;办公楼入口排着长队等待刷卡进门&#xff1b;访客需要在前台登记身份证&#xff0c;保安还要手动核对信息。这种传统门禁方式不仅效率低下&am…...

数据库课程设计好帮手:Phi-4-mini-reasoning辅助ER图设计与SQL优化

数据库课程设计好帮手&#xff1a;Phi-4-mini-reasoning辅助ER图设计与SQL优化 1. 课程设计的痛点与解决方案 每到学期末&#xff0c;计算机专业的学生们都会面临一个共同的挑战——数据库课程设计。这个需要完成ER图设计、SQL编写和文档撰写的综合项目&#xff0c;常常让初学…...

别再死记硬背了!用eNSP模拟一个500人公司的真实网络(含VLAN、MSTP、VRRP完整配置)

从零构建500人企业网络&#xff1a;eNSP实战中的VLAN、MSTP与VRRP深度解析 当你第一次面对企业级网络规划时&#xff0c;是否曾被各种协议和配置弄得晕头转向&#xff1f;本文将以一个真实的500人企业网络为蓝本&#xff0c;带你用华为eNSP模拟器完成从需求分析到最终实现的完整…...

Amlogic S9XXX Armbian刷机完全指南:从入门到进阶的5个关键问题

Amlogic S9XXX Armbian刷机完全指南&#xff1a;从入门到进阶的5个关键问题 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l,…...

技能大赛备赛避坑指南:搞定软件测试五大任务(功能/自动化/性能/单元/接口)的常见错误与调试技巧

技能大赛备赛避坑指南&#xff1a;软件测试五大任务实战排错手册 参加职业院校技能大赛软件测试赛项的师生们&#xff0c;往往在备赛过程中遇到各种"坑"&#xff1a;脚本突然报错、环境配置冲突、报告格式被扣分…这些问题看似琐碎&#xff0c;却可能直接影响比赛成绩…...

从零开始:用CosyVoice2-0.5B快速搭建AI语音生成平台

从零开始&#xff1a;用CosyVoice2-0.5B快速搭建AI语音生成平台 1. 为什么选择CosyVoice2-0.5B&#xff1f; 语音合成技术已经发展多年&#xff0c;但大多数解决方案要么需要复杂的配置过程&#xff0c;要么需要大量训练数据。阿里开源的CosyVoice2-0.5B打破了这一局面&#…...