小研究 - JVM 垃圾回收方式性能研究(一)
本文从几种JVM垃圾回收方式及原理出发,研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响,并通过最终测试数据对比,给出了不同应用场景下如何选择垃圾回收策略的方法。
目录
1 引言
2 垃圾回收算法
2.1 标记清除法
2.2 复制算法
2.3 标记压缩法
2.4 分区算法
1 引言
垃圾回收(Garbage Collection, GC)是 Java 虚拟机(JVM)中 使用的一种内存管理方案,它能够不断自动释放内存中的不再被使用的对象,并按照特定的垃圾回收算法实现对于内存资源的管理。相较于 C/C++ 手动内存管理方式,GC 的出现大大减少了开发人 员在内存资源管理方面的工作,是 JVM 的核心组成部分,并且对 JVM 的性能有着重要的影响。随着技术及硬件的发展,新的垃圾回收方式也在随着 JDK 版 本的更新而被加入,如在 JDK1.7 中正式引入了 G1 回收器,JDK 11 中引入了 Z 回收器等。面对如此多的垃圾回收器,如何在不同实际应用场景下中选择最适合的是进行JVM性能优化的首要问题,解决这一问题则必须先了解不同垃圾回收方式的性能表现。以往也有相关方面的研究,但性能测试或基于 SPEC JVM2008又或是基 于 SPEC jbb2000[3-4] 等一些现已不再提供支持的测试工具,已不能适应当前时代的需求,而通过一种权威且最新的基准测试工具分析不同垃圾回收器的性能表现是十分有意义的。SPEC jbb(Java Business Benchmark)基准测试是标准性能评估组织 SPEC 发布的一项用于衡量服务器 Java 应用性能的测试基准。从 2000 年 6 月 SPEC 组织发布第一版服务器 Java 性能测试基准 SPEC jbb2000 至今,历经了 SPEC jbb2005(2006.1-2013.10)、 SPEC jbb2013(2013.1-2014.12)多个版本的更新后,SPEC jbb2015 (2015.9- 至今)基于最新的 Java 应用程序特性开发,支持虚拟化和云环境。现在 SPEC jbb 测试已经发展成为 JVM 厂商、Java 开发者,研究学者,以及相关学术机构评估 Java 业务应用性能及可扩展性的一项权威基准测试标准。 本文将首先从垃圾回收原理出发,分别介绍几种垃圾回收器, 然后对这几种垃圾回收器在基准测试中的性能表现进行分析。
2 垃圾回收算法
Java 自动化的管理内存资源必须通过垃圾回收算法来确定哪些是有效的对象,哪些是无效的对象,对于无效的对象就要进行垃圾回收处理。作为垃圾回收器的实现基础,下面先介绍常见的垃圾回收算法。
2.1 标记清除法
在垃圾回收算法中,根是指向对象的指针的起点部分。通过根对象进行引用搜索,最终可达的对象被称为可达对象;通过根对象进行引用搜索,最终没有被引用的对象被称为不可达对象。在标记阶段,首先通从根节点开始标记所有的可达对象,不可达对象则为垃圾对象。在清除阶段,清除所有未被标记的对象。由于清除时不考虑内存空间的连续性,因此标记清除法最大的问题是产生内存空 间碎片。特别是在进行大对象内存分配时,相较于连续内存空间,内存碎片的存在会降低堆内存效率。

2.2 复制算法
复制算法将内存空间划分为相等的两部分,且每次只会只使用其中的一部分,当垃圾回收时,首先将使用中那部分内存里存活的对象复制到另一部分内存区,接着清除使用的内存块中的所有对象, 最后将两个内存区进行互换,从而完成垃圾回收。复制算法在复制的过程中能够有效避免内存空间碎片的产生,但代价是系统内存空间损失一半。
2.3 标记压缩法
标记压缩法是一种针对老年代的垃圾回收算法。对于老年代,由于大部分对象都是存活对象,使用复制算法代价将使内存折半,成本太高并不适用。标记压缩法正是为了应对这种情况而产生,首 先从根节点开始,对所有可达对象进行标记,然后将所有存活的对象压缩到内存一端,再清理剩余的所有的空间。这种方法既避免了碎片的产生,又不需要将内存分为两半,效率很高。
2.4 分区算法
分区算法将整个堆空间划分成连续的不同小区间,每一小区间都独立使用,独立回收,并可以控制一次回收的小区间数量。一般来说,在相同条件下,堆空间越大,进行一次垃圾回收的所需的时 间就越长,导致产生的停顿时间也越长。因此如果将堆内存分割成多个小块,并根据目标停顿时间的要求,每次合理地控制回收部分小区间,而不是回收整个堆空间,则可以有效减小一次垃圾回收所产生的的停顿时间。
相关文章:
小研究 - JVM 垃圾回收方式性能研究(一)
本文从几种JVM垃圾回收方式及原理出发,研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响,并通过最终测试数据对比,给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 1 引言 2 垃圾回收算法 2.1 标记清除法 2.2…...
[LeetCode]链表相关题目(c语言实现)
文章目录 LeetCode203. 移除链表元素LeetCode237. 删除链表中的节点LeetCode206. 反转链表ⅠLeetCode92. 反转链表 II思路 1思路 2 LeetCode876. 链表的中间结点剑指 Offer 22. 链表中倒数第k个节点LeetCode21. 合并两个有序链表LeetCode86. 分隔链表LeetCode234. 回文链表Leet…...
[深入理解NAND Flash (操作篇)] NAND 初始化常用命令:复位 (Reset) 和 Read ID 和 Read UID 操作和代码实现
依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《深入理解Flash:闪存特性与实践》 内容摘要 全文 4400 字,主要内容 复位的目的和作用? NAND Reset 种类:FFh, FCh, FAh, FDh 区别 Reset 操作步骤 和 代码实现 Read ID 操作步骤 和 代码实现 Read Uni…...
RxJava 复刻简版之二,调用流程分析之案例实现
接上篇:https://blog.csdn.net/da_ma_dai/article/details/131878516 代码节点:https://gitee.com/bobidali/lite-rx-java/commit/05199792ce75a80147c822336b46837f09229e46 java 类型转换 kt 类型: Any Object泛型: 协变: …...
SpringMVC中Model和ModelAndView的区别
SpringMVC中Model和ModelAndView的区别 两者的区别: 在SpringMVC中,Model和ModelAndView都是用于将数据传递到视图层的对象 Model是”模型“的意思,是MVC架构中的”M“部分,是用来传输数据的。 理解成MVC架构中的”M“和”V“…...
Tomcat安装与管理
文章目录 Tomcat安装及管理Tomcat gz包安装:JDK安装:Tomcat安装:修改配置文件(如下):服务启动配置: Tomcat-管理(部署jpress):修改允许访问的主机修改允许管理APP的主机进入管理&…...
React之路由
React之路由 背景: react: 18.2.0 路由:react-router-dom: 6.14.2 1、路由表配置 src下新建router/index.ts import React, { lazy } from react import { Navigate } from react-router-dom import Layout from /layout/Index import { JSX } from rea…...
机器学习深度学习——非NVIDIA显卡怎么做深度学习(坑点排查)
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——数值稳定性和模型化参数(详细数学推导) 📚订阅专栏:机器…...
2021 Robocom 决赛 第四题
原题链接: PTA | 程序设计类实验辅助教学平台 题面: 在一个名叫刀塔的国家里,有一只猛犸正在到处跑着,希望能够用它的长角抛物技能来撞飞别人。已知刀塔国有 N 座城市,城市之间由 M 条道路互相连接,为了拦…...
线程池-手写线程池Linux C简单版本(生产者-消费者模型)
目录 简介手写线程池线程池结构体分析task_ttask_queue_tthread_pool_t 线程池函数分析thread_pool_createthread_pool_postthread_workerthread_pool_destroywait_all_donethread_pool_free 主函数调用 运行结果 简介 本线程池采用C语言实现 线程池的场景: 当某些…...
05-向量的意义_n维欧式空间
线性代数 什么是向量?究竟为什么引入向量? 为什么线性代数这么重要?从研究一个数拓展到研究一组数 一组数的基本表示方法——向量(Vector) 向量是线性代数研究的基本元素 e.g. 一个数: 666,…...
交通运输安全大数据分析解决方案
当前运输市场竞争激烈,道路运输企业受传统经营观念影响,企业管理者安全意识淡薄,从业人员规范化、流程化的管理水平较低,导致制度规范在落实过程中未能有效监督与管理,执行过程中出现较严重的偏差,其营运车…...
vimrc 配置 (持续跟新中)
vimrc 配置 #显示行号 set nu #自动换行 set autoindent #设置tab键 宽度为四个空格 set tabstop4 set shiftwidth4 set expandtab更多文章,详见我的博客网站...
【集成学习介绍】
1. 引言 在机器学习领域,集成学习(Ensemble Learning)是一种强大的技术,通过将多个弱学习器组合成一个更强大的集成模型,来提升模型的鲁棒性和性能。 2. 集成学习的原理 集成学习的核心思想是“三个臭皮匠ÿ…...
动画制作选择Blender还是Maya
Blender和Maya是两种最广泛使用的 3D 建模和动画应用程序。许多经验丰富的用户表示,Blender 在雕刻工具方面远远领先于 Maya,并且在 3D 建模方面达到了相同的质量水平。对于刚接触动画行业的人来说,您可能会问“我应该使用 Blender 还是 Maya…...
215. 数组中的第K个最大元素
题目链接:力扣 解题思路: 方法一:基于快速排序 因为题目中只需要找到第k大的元素,而快速排序中,每一趟排序都可以确定一个最终元素的位置。 当使用快速排序对数组进行降序排序时,那么如果有一趟排序过程…...
NLP From Scratch: 生成名称与字符级RNN
NLP From Scratch: 生成名称与字符级RNN 这是我们关于“NLP From Scratch”的三个教程中的第二个。 在<cite>第一个教程< / intermediate / char_rnn_classification_tutorial ></cite> 中,我们使用了 RNN 将名称分类为来源语言。 这次ÿ…...
Spring MVC程序开发
目录 1.什么是Spring MVC? 1.1MVC定义 1.2MVC和Spring MVC的关系 2.为什么要学习Spring MVC? 3.怎么学Spring MVC? 3.1Spring MVC的创建和连接 3.1.1创建Spring MVC项目 3.1.2RequestMapping 注解介绍 3.1.3 RequestMapping 是 post 还是 get 请求? …...
医疗知识图谱问答——文本分类解析
前言 Neo4j的数据库构建完成后,现在就是要实现医疗知识的解答功能了。因为是初版,这里的问题解答不会涉及深度学习,目前只是一个条件查询的过程。而这个过程包括对问题的关键词拆解分类,然后提取词语和类型去图数据库查询…...
JS关于多张图片上传显示报错不影响后面图片上传方法
关于多张图片上传或者下载显示报错后会程序会终止执行,从而影响后面图片上传。 解决方法: /*能正常访问的图片*/ const url https://2vimg.hitv.com/100/2308/0109/5359/dqKIZ7d4cnHL/81Vu0c.jpg?x-oss-processimage/format,webp; /*不能正常下载的图…...
你的QQ空间记忆正在消失?GetQzonehistory帮你永久保存青春时光
你的QQ空间记忆正在消失?GetQzonehistory帮你永久保存青春时光 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里的珍贵回忆会随着时间流逝而消失&#x…...
手把手教你用QQbot对接多青龙面板(含CK分配技巧)
手把手教你用QQbot对接多青龙面板(含CK分配技巧) 在自动化管理工具日益普及的今天,如何高效管理多个青龙面板成为许多开发者的痛点。本文将带你从零开始,通过QQbot实现多青龙面板的智能对接,并深入探讨Cookieÿ…...
技术赋能音频自由:qmcdump开源工具破解QQ音乐加密格式全解析
技术赋能音频自由:qmcdump开源工具破解QQ音乐加密格式全解析 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …...
Cursor + Claude 3.7:解锁高效编程新范式
1. 为什么开发者需要CursorClaude 3.7组合 最近在重构一个遗留的电商系统时,我遇到了所有程序员都头疼的问题:面对20万行混杂着jQuery和Vue的祖传代码,光是理清支付模块的业务逻辑就花了三天。直到同事推荐了CursorClaude 3.7这个组合&#x…...
告别Transformer高开销:用频域注意力(FMNet思路)为你的轻量化模型注入全局感知能力
频域注意力革命:如何在轻量化模型中实现全局感知而不牺牲效率 引言:轻量化模型的困境与突破 在移动端AI和边缘计算领域,模型轻量化一直是个永恒的话题。开发者们不断在模型精度和计算资源之间寻找平衡点,而传统CNN模型虽然计算效…...
【HTTP】HTTP协议核心体系:请求方法与状态码全结构化解析(附《思维导图》)
文章目录HTTP协议核心体系:请求方法与状态码全结构化解析一、核心基础概念1.1 HTTP方法的两大核心属性(规范级定义)1.2 HTTP状态码分类规则二、HTTP请求方法2.1 标准核心方法(RFC 7231 定义)2.1.1 只读类方法ÿ…...
3步解决ComfyUI-Florence2视觉语言模型加载失败:实战配置指南
3步解决ComfyUI-Florence2视觉语言模型加载失败:实战配置指南 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 当您在ComfyUI中部署Microsoft Florence2视觉语言模型…...
深度学习特征分解、SVD 与 PCA —— 矩阵的“质因数分解“(六)
1. 定位导航 本篇是第2章线性代数的终篇,覆盖三个最有力的矩阵分析工具:特征分解、奇异值分解(SVD)、主成分分析(PCA)。此外还包括三个辅助工具:Moore-Penrose 伪逆、迹运算、行列式。 这些工具贯穿深度学习的方方面面——PCA 用于数据预处理和降维,SVD 用于模型压缩…...
Ostrakon-VL扫描终端效果:不同材质价签(纸质/塑料/金属)识别
Ostrakon-VL扫描终端效果:不同材质价签(纸质/塑料/金属)识别 1. 像素特工:Ostrakon-VL扫描终端介绍 这是一个基于Ostrakon-VL-8B多模态大模型开发的Web交互终端,专门针对零售与餐饮场景优化。与传统工业级UI不同&…...
SEO优化中关键词的作用是什么_关键词布局对SEO有什么影响
SEO优化中关键词的作用是什么 在现代网络营销中,SEO(搜索引擎优化)是提升网站在搜索引擎结果中排名的重要手段。其中,关键词的作用至关重要。关键词不仅是搜索引擎理解用户意图的重要载体,也是搜索引擎算法评估网站相…...
