互联网三高-高性能之JVM调优

news2025/4/8 7:40:58

1 运行时数据区

        JVM运行时数据区是Java虚拟机管理的内存核心模块,主要分为线程共享和线程私有两部分。

        (1)线程私有

                        ① 程序计数器:存储当前线程执行字节码指令的地址,用于分支、循环、异常处理等流程控制‌

                        ② 虚拟机栈:存储方法调用的栈帧,包含局部变量表、操作数栈、动态链接、方法返回地址等‌

                        ③ 本地方法栈:服务于Native方法(如C/C++实现的方法)的执行,结构与虚拟机栈类似‌

        (2)线程共享

                        ① 堆:存储对象实例和数组,是垃圾回收(GC)的主要区域‌

                        ② 方法区:存储类元信息(如类名、字段、方法)、运行时常量池、静态变量、即时编译后的代码等‌(JDK 8及之后:元空间(MetaSpace),使用本地内存)

2 三大GC算法

        2.1 标记-复制算法(年轻代)

                原理:将内存分为两块(如Eden区和Survivor区),每次仅使用一块;存活对象复制到未使用的内存块,原内存块整体回收‌

                优点:无内存碎片,对象分配效率高‌

                缺点:需要一块内存;复制对象过程比较耗时

        2.2 标记-清除算法

                原理:从GC Roots出发,标记所有可达对象(标记);回收未被标记的对象即垃圾(清除)‌

                优点:实现简单,无需移动对象

                缺点:有内存碎片问题,可能导致后续大对象分配失败‌

        2.3 标记-整理算法

                原理:从GC Roots出发,标记所有可达对象(标记);将存活对象向内存一端移动,清理边界外的空间‌(整理)

                优点:避免内存碎片,支持连续内存分配‌

                缺点:整理过程需STW;复制对象过程比较耗时

        无论什么GC回收算法,第一阶段都是标记,根据根可达性分析,从GC Roots出发开始遍历访问,找出有效对象。

        2.4 标记算法—三色标记法

                三色

                        ① 白色:尚未遍历过

                        ② 黑色:本对象已经遍历过,而且本对象引用的其他对象也全部遍历过

                        ③ 灰色:本对象已经遍历过,而且本对象引用的其他对象尚未全部遍历完

                基本流程

                        ① 初始阶段:所有对象都在【白色集合】中

                        ② 将GC Roots直接引用的对象挪到【灰色集合】中,并将其从【白色集合】中去掉

                        ③ 从【灰色集合】中获取对象,将本对象引用的其他对象全部挪到【灰色集合】中,并从【白色集合】中去掉,将本对象挪到黑色集合中

                        ④ 重复 步骤③ 操作,直至【灰色集合】为空时结束

                        ⑤ 结束后,仍在【白色集合】中的对象就是垃圾,可以回收

说明:图片引用自 https://zhuanlan.zhihu.com/p/664929804?utm_id=0

3 常见垃圾收集器

        3.1 新生代(标记-复制算法)

                Serial New:单线程收集器

                ParNew:并行收集器(Serial多线程版本)

                Parallel Scavenge:并行回收,追求高吞吐量,高效利用CPU

        3.2 老年代

                Serial Old:单线程收集器(标记-整理算法)

                Parallel Old:并行收集器(标记-整理算法)

                CMS:以‌低停顿‌为目标,分阶段并发执行<初始标记、并发标记、重新标记、并发清除>(标记-整理算法)

                        (1)步骤:

                                ① 初始标记:SWT,仅标记GC Roots能直接关联的对象,速度比较快

                                ② 并发标记:可以和用户线程并发执行,通过GC Roots可达性算法标记所有可达对象

                                ③ 重新标记:STW,对并发标记阶段产生的垃圾对象进行标记修正,以及更新逃逸对象

                                ④ 并发清除:可以和用户线程并发执行,清除可回收对象

                        (2)优点:支持并发收集,低停顿,能保证短时间内执行完成,达到近似并发目的

                        (3)缺点:

                                ① 无法清理浮动对象

                                ② 使用标记-清除算法,会产生大量内存碎片

                                ③ 必须要在老年代用尽之前完成垃圾回收,否则会触发担保机制,退化成Serial Old收集器来进行垃圾回收,效率低下

                        (4)使用场景:老年代垃圾回收,需低停顿的交互式应用;堆内存不宜过大(避免并发标记耗时过长)‌

                        (5)配置参数

                                -XX:+UseConcMarkSweepGC:启用CMS收集器‌

                                -XX:CMSInitiatingOccupancyFraction:设置触发CMS回收的老年代使用率阈值(默认92%)‌

                                -XX:+CMSParallelRemarkEnabled:启用并行重新标记(减少重新标记时间)‌

        3.3 不分代

                G1:将堆划分为多个大小相等的Region,采用‌标记-整理算法‌(全局)和‌标记-复制算法‌(局部)

                        (1)原理:分治法,将堆分成若干个等大的区域Region(默认2048个,每个1-32MB)

                        (2)优点: ‌低停顿;基于标记-整理算法无内存碎片;大堆友好‌,支持TB级堆内存

                        (3)缺点:

                                ① 内存占用‌:维护RSet(记忆集)和CSet(回收集)需额外内存‌

                                ② CPU消耗‌:并发标记和RSet更新增加CPU开销‌

                                ③ 复杂调优‌:需平衡停顿时间、吞吐量和Region大小等参数‌

                        (4)使用场景:大内存服务端应用;低延迟需求‌;JDK 9+默认收集器‌

                        (5)配置参数

                                -XX:+UseG1GC:启用G1收集器‌

                                -XX:MaxGCPauseMillis:设置最大GC停顿时间目标(默认200ms)‌

                                -XX:G1HeapRegionSize:指定Region大小(需为2的幂)‌

                                -XX:G1MixedGCLiveThresholdPercent:设置混合GC中Region存活对象占比阈值(默认85%,高于此值不回收)‌

                ZGC:基于‌并发标记-整理算法‌,使用染色指针和读屏障技术,实现亚毫秒级停顿(支持TB级堆内存管理)

4 JDK各版本默认使用垃圾收集器

        ‌≤1.5‌    Serial + Serial Old

        1.8‌    Parallel Scavenge+ Parallel Old

        9~21‌    G1

        11/17/21‌    新增ZGC/Shenandoah/Epsilon

通过命令行查看当前JDK默认垃圾收集器
java -XX:+PrintCommandLineFlags -version

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2330312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

封装可拖动弹窗(vue jquery引入到html的版本)

vue cli上简单的功能&#xff0c;在js上太难弄了&#xff0c;这个弹窗功能时常用到&#xff0c;保存起来备用吧 备注&#xff1a;deepseek这个人工智障写一堆有问题的我&#xff0c;还老服务器繁忙 效果图&#xff1a; html代码&#xff1a; <div class"modal-mask&qu…

【技术报告】GPT-4o 原生图像生成的应用与分析

【技术报告】GPT-4o 原生图像生成的应用与分析 1. GPT-4o 原生图像生成简介1.1 文本渲染能力1.2 多轮对话迭代1.3 指令遵循能力1.4 上下文学习能力1.5 跨模态知识调用1.6 逼真画质与多元风格1.7 局限性与安全性 2. GPT-4o 技术报告2.1 引言2.2 安全挑战、评估与缓解措施2.2.1 安…

初阶数据结构(3)顺序表

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现初始化尾插头插尾删头删查找指定位置之前插入数据删除指定位置的数据销毁 1.线性表 首先我们需要知道的是&#xff0c;…

谷歌发布网络安全AI新模型Sec-Gemini v1

谷歌近日宣布推出实验性AI模型Sec-Gemini v1&#xff0c;旨在通过人工智能技术革新网络安全防御体系。该模型由Sec-Gemini团队成员Elie Burzstein和Marianna Tishchenko共同研发&#xff0c;旨在帮助网络安全人员应对日益复杂的网络威胁。 攻防不对称的破局之道 Sec-Gemini团队…

Meta LLaMA 4:对抗 GPT-4o 与 Claude 的开源王牌

2025 年 4 月&#xff0c;Meta 正式发布了 LLaMA 4 系列的首批两款模型。 这两款模型模型分别是&#xff1a;LLaMA 4 Scout 与 LLaMA 4 Maverick&#xff0c;均采用了 专家混合架构&#xff08;Mixture-of-Experts, MoE&#xff09;。 据 Meta 表示&#xff0c;这是首次有 …

企业级 ClickHouse Docker 离线部署实践指南20250407

企业级 ClickHouse Docker 离线部署实践指南 引言 在数据分析与日志处理日益重要的今天&#xff0c;ClickHouse 凭借其高性能、列式存储架构&#xff0c;成为企业在大数据分析中的首选引擎之一。本文基于一位金融行业从业者在离线网络环境中部署 ClickHouse 的真实实践过程&a…

DeepSeek-MLA

MLA 结构 需要缓存 KV 向量共用的压缩隐特征K 向量多头共享的带位置编码的向量 为什么带有位置信息的 Q 向量来自于隐特征向量&#xff0c;而带有位置的 K 向量来自于 H 向量且共享呢&#xff1f; 最好的方法肯定是从H向量直接计算并且不共享&#xff0c;但是会大大增加显存使…

pyTorch-迁移学习-学习率衰减-四种天气图片多分类问题

目录 1.导包 2.加载数据、拼接训练、测试数据的文件夹路径 3.数据预处理 3.1 transforms.Compose数据转化 3.2分类存储的图片数据创建dataloader torchvision.datasets.ImageFolder torch.utils.data.DataLoader 4.加载预训练好的模型(迁移学习) 4.1固定、修改预训练…

vscode Colipot 编程助手

1、登录到colipot&#xff0c;以github账号&#xff0c;关联登录 点击【continue】按钮&#xff0c;继续。 点击【打开Visual Studio Code】&#xff0c;回到vscode中。 2、问一下11? 可以看出&#xff0c;很聪明&#xff0c;一下子就算出来了。 3、帮我们写一个文件&#xf…

1、window 下SDL 下载使用, 测试环境搭建

1. SDL3下载 官网&#xff1a; https://www.libsdl.org/ 点击SDL Releases 或者 SDL GItHub 进入github下载&#xff1a; 因为自己在windows下使用的mingw,所以下载mingw版的&#xff0c;也可以 下载源码自己编译。 2. 项目搭建 这里使用的时mingw vsocde cmake, 可以使…

OpenGL学习笔记(模型材质、光照贴图)

目录 光照与材质光照贴图漫反射贴图采样镜面光贴图 GitHub主页&#xff1a;https://github.com/sdpyy OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 光照与材质 在现实世界里&…

视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析

一、方案背景 某电动车企业不停爆出维权新闻&#xff0c;支持和反对的声音此起彼伏&#xff0c;事情不断发酵、反转&#xff0c;每天都有新消息&#xff0c;令人目不暇接。车展、车店作为维权事件的高发场所&#xff0c;事后复盘和责任认定时&#xff0c;安防监控和视频监控平…

Hibernate里的对象不同状态和Session的核心方法

临时状态的测试 Student student new Student("张三", "男", 22, new Date()); 以上student就是一个Transient(临时状态),此时student并没有被session进行托管&#xff0c;即在session的缓存中还不存在student这个对象&#xff0c;当执行完save方法后&a…

模型嵌入式部署

背景 自从深度学习大规模应用以来&#xff0c;其中一个应用方向就是将深度学习视觉算法部署到嵌入式平台上&#xff0c;使用NPU推理。虽然已经做了很久的模型部署&#xff0c;但一直都是在公司默默耕耘&#xff0c;为了发展一下自己“边缘部署专家”这个个人品牌&#xff0c;打…

Redlinux(2025.3.29)

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址。(以nmtui命令为例) 2、测试你的虚拟机是否能够ping通网关和dns&#xff0c;如果不能请修改网关和dns的地址。 首先打开虚拟网络编辑器查看NAT设置里的网关IP&…

uni-app项目运行在浏览器、微信开发者工具、mumu模拟器

一、安装HBuilder X 1、下载HBuilder X 官网网址&#xff1a;https://dcloud.io/hbuilderx.html 根据电脑系统下载对应的版本&#xff08;我的电脑是Windows 10&#xff09; 2.安装HBuilder X 直接将HBuilderX.4.61.2025040322-alpha.zip解压到自己想要存放的文件夹中 双击…

2025-04-07 NO.3 Quest3 MR 配置

文章目录 1 MR 介绍1.1 透视1.2 场景理解1.3 空间设置 2 配置 MR 环境2.1 场景配置2.2 MR 配置 3 运行测试 配置环境&#xff1a; Windows 11Unity 6000.0.42f1Meta SDK v74.0.2Quest3 1 MR 介绍 1.1 透视 ​ 透视&#xff08;Passthrough&#xff09;是将应用的背景从虚拟的…

抓wifi无线空口包之Macbook Pro抓包(一)

参考&#xff1a; 在MAC OS上进行Wi-Fi抓包和空中包分析_空口抓包和无线网卡抓包的区别-CSDN博客 WireShark中802.11帧的类型、子类型对照表_wireshark 怎么看disassociate帧和deauthenticate-CSDN博客 一、在macbook pro上&#xff0c;点击option 同时点击右上角wifi 功能&a…

单元测试原则之——不要模拟值对象 (1)

1. 什么是值对象(Value Objects)? 值对象是指那些不可变且仅通过其属性(数据)来定义的对象。它们通常没有复杂的逻辑或行为,主要用于存储和传递数据。例如: ● 字符串(String) ● 数字(Integer, Double) ● 日期(LocalDate, Instant) ● 自定义的简单数据类(如…

版本控制工具——SVN

目录 【版本控制系统】 【SVN概述】 【SVN基本使用】 【解决SVN拉取文件到本地后不显示绿色图标问题】 【版本控制系统】 版本控制系统&#xff08;version control system&#xff09;是一种用于管理文件变更的软件工具&#xff0c;主要用于记录文件的修改历史&#xff0c…