【JVM深层系列】JVM调优的“标准参数“的各种陷阱和坑点分析

JDK17+SpringBoot v3.0.0-M4 遇到的坑 阅读详情

易错问题】Major GC和Full GC的区别是什么?触发条件呢?

相信大多数人的理解是Major GC只针对老年代,Full GC会先触发一次Minor GC,不知对否?我参考了R大的分析和介绍,总结了一下相关的说明和分析结论。

在基于HotSpotVM的基础角度

针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种:

Partial GC(部分回收模式)

Partial GC代表着并不收集整个GC堆的模式

  • Young Generation GC(新生代回收模式):它主要是进行回收新生代范围内的内存对象的GC回收器。
  • Old/Tenured Generation GC(老年代回收模式):它主要是针对于回收老年代Old/Tenured Generation范围内的GC垃圾回收器(CMS的Concurrent Collection是这个模式)。
  • Mixed Generation GC(混合代回收模式):收集整个young gen以及部分old gen的GC。只有G1有这个模式

Full GC(全体回收模式)

Full GC代表着收集整个JVM的运行时堆+方法区+直接堆外内存的总体范围内。(甚至可以理解为JVM进程范围内的绝大部分范围的数据区域)。

它会涵盖了所有的模式和区域包含:Young Gen(新生代)、Tenured Gen(老生代)、Perm/Meta Gen(元空间)(JDK8前后的版本)等全局范围的GC垃圾回收模式。

在一般情况下Major GC通常是跟Full GC是等价的,收集整个GC堆。但如果从HotSpot VM底层的细节出发,如果再有人说“Major GC”的时候一定要问清楚他想要指的是上面的Full GC还是Old/Tenured GC。

基于最简单的分代式GC策略

触发条件是:Young GC

按HotSpot VM的Serial GC的实现来看,当Young gen中的Eden区分达到阈值(属于一定的百分比进行控制)的时候触发。

注意:Young GC中有部分存活对象会晋升到Old/Tenured Gen,所以Young GC后Old Gen的占用量通常会有所升高。

触发条件是:Full GC

  1. 当准备要触发一次Young GC时,如果发现统计数据说之前Young Old/Tenured Gen剩余的空间大,则不会触发Young GC,而是转为触发Full GC(因为HotSpot VM的GC里,除了CMS的Concurrent collection之外,其它能收集Old/Tenured Gen的GC都会同时收集整个GC堆,包括Young gen,所以不需要事先触发一次单独的Young GC);
  2. 如果有Perm/Meta gen的话,要在Perm/Meta gen分配空间但已经没有足够空间时,也要触发一次full GC。
  3. System.gc()方法或者Heap Dump自带的GC,默认也是触发Full GC。HotSpot VM里其它非并发GC的触发条件复杂一些,不过大致的原理与上面说的其实一样。

注意:Parallel Scavenge(-XX:+UseParallelGC)框架下,默认是在要触发Full GC前先执行一次Young GC,并且两次GC之间能让应用程序稍微运行一小下,以期降低Full GC的暂停时间(因为young GC会尽量清理了Young Gen的垃圾对象,减少了Full GC的扫描工作量)。控制这个行为的VM参数是-XX:+ScavengeBeforeFullGC。

触发条件是:Concurrent GC

Concurrent GC的触发条件就不太一样。以CMS GC为例,它主要是定时去检查Old Gen的使用量,当使用量超过了触发比例就会启动一次CMS GC,对Old gen做并发收集

Java性能调优实战:jstack线程堆栈分析从原理到应用 在Java应用性能调优领域,线程状态分析是诊断复杂线上问题的核心技术手段。其原理基于JVM线程模型,通过捕获线程执行堆栈的快照,揭示线程的运行状态、锁持有与等待关系。这项技术的核心价值在于能够精准定位死锁、CPU热点、线程阻塞等疑难问题,是保障应用稳定性的关键。在实际应用场景中,它常与系统监控指标(如CPU使用率)结合,用于分析应用无响应、性能骤降等生产环境故障。本文聚焦于jstack这一JDK原生工具,深入解读其输出的线程堆栈日志结构,并分享如何识别死锁、CPU占用过高等典型问题模式,帮助开发者快速掌握这 阅读详情

相关推荐

数据库连接池配置陷阱与性能调优实战

数据库连接池是Java应用中管理数据库连接的核心组件,其工作原理是通过复用连接减少创建和销毁的开销。合理的连接池配置对系统性能至关重要,不当的参数设置可能导致线程阻塞、响应延迟等隐蔽问题。在分布式系统和高并发场景下,连接池大小、超时时间等参数的精确计算尤为关键。通过HikariCP等现代连接池实现,开发者可以监控连接等待时间、活跃连接数等指标。本文通过一个真实案例,展示了如何从线程堆栈采样入手,结合连接池计算公式(连接数 = (核心数 * 2) + 有效磁盘数),解决因配置不当导致的性能瓶颈问题,为类似场景

weixin_30582943的博客 322

Ubuntu 20.04 手动部署 Elastic Stack 系统调优指南

Elastic Stack(Elasticsearch、Logstash、Kibana)是现代可观测性与搜索服务的核心技术栈,其稳定运行高度依赖底层 Linux 系统配置。理解 JVM 内存模型、Linux 内核参数(如 vm.max_map_count、swappiness、transparent_hugepage)及 systemd 服务机制,是保障 ES 启动成功、写入低延迟、Kibana 响应迅捷的基础前提。尤其在 Ubuntu 20.04 这一广泛使用的 LTS 发行版中,系统默认限制(如文件句柄

weixin_34345753的博客 384

Ubuntu 14.04下Elasticsearch生产集群调优实战

Elasticsearch作为分布式搜索与分析引擎,其性能高度依赖底层操作系统与JVM协同。在Linux系统中,内核参数、文件系统挂载选项、内存管理机制共同构成稳定运行的基础约束;而JVM堆配置、GC策略、锁内存(mlockall)等设置则直接影响查询延迟与吞吐。Ubuntu 14.04虽已停止支持,但其3.13内核+glibc 2.19组合在大量政企日志平台中仍承担核心角色,对vm.swappiness、tcp_sack、ext4 writeback等老版本特性的深度调优,成为保障P99延迟低于100ms

cojm55771的博客 312

Eclipse内存配置实战:Heap与Metaspace调优指南

Java虚拟机(JVM)内存管理是保障IDE稳定运行的基础能力,其核心包括堆(Heap)和元空间(Metaspace)两大区域。Heap用于存储对象实例,受-Xms和-Xmx参数约束;Metaspace替代永久代,承载类元数据,默认无上限但需显式限制以避免系统内存耗尽。合理配置不仅提升Eclipse启动速度、热部署响应与GC效率,更能规避因类加载爆炸或静态引用泄漏引发的OutOfMemoryError。本文结合Spring Boot多模块、微服务及插件开发等典型场景,提供可验证的参数组合、MAT内存分析方法

weixin_33874713的博客 406

丰巢Java高级真题解析:JVM调优、并发链路与字节码增强

Java高级工程师需掌握的不仅是语法和框架,更是高并发、低延迟、强一致等生产级系统背后的核心原理。JVM调优本质是内存资源与GC停顿的动态平衡,尤其在堆外内存泄漏、G1参数精细化控制等场景中,Netty DirectBuffer管理和RegionSize配置直接影响服务SLA;并发编程的关键在于构建具备熔断、降级、异步补偿能力的响应式链路,而非简单使用ThreadPoolExecutor或CompletableFuture;而动态代理与字节码增强(如CGLIB+ASM)则支撑了设备端强一致性状态同步等硬核需

weixin_30844577的博客 164

Python-uiautomator2保姆级安装指南:从环境配置到设备连接全流程

本文提供Python-uiautomator2的保姆级安装指南,涵盖从环境配置到设备连接的全流程。详细介绍了Python 3.6+、ADB工具等核心组件的准备,以及uiautomator2的安装和设备端服务初始化步骤,帮助开发者快速搭建Android自动化测试环境,避免常见问题。

nnn11的博客 940

电影票购票小程序搭建(源码部署)

答:为用户提供便捷的购票方式,包括授权登录、个性化推荐、在线选座、订单管理等功能,同时在界面设计上注重用户友好性,简化用户的购票流程。答:通过展示电影院的优惠活动和票价信息,同时提供电影推荐功能,根据用户的历史购票记录和电影评分推荐个性化的电影列表,吸引用户购票。编写页面逻辑代码:使用JavaScript编写小程序页面的逻辑代码,实现电影列表的获取、电影详情的展示、座位选择的逻辑等。设计小程序界面:使用WXML和WXSS编写小程序的界面代码,实现电影列表的展示、电影详情的样式、座位选择页面的布局等。

2301_79072569的博客 2068

东方财富API隐藏技巧:这样获取分时均价线数据更稳定(避坑指南)

本文深入解析东方财富API获取股票分时数据,特别是分时均价线的实战技巧与避坑指南。针对高频调用中常见的请求失败、数据错位及IP限制等问题,提供了从接口参数深层解析、稳健请求与错误处理机制,到系统优化与数据校验的全流程解决方案,帮助开发者构建稳定可靠的数据采集系统。

rice5的博客 2541

使用QGIS提取天地图遥感影像中的建筑物轮廓,及AI方案

用QGIS的插件提取遥感影像中的建筑轮廓,并提供了几个AI提取建筑轮廓的方案。

cky_123的博客 2万+

Windows系统下com0com虚拟串口安装与驱动签名禁用全攻略

本文详细介绍了在Windows系统下安装com0com虚拟串口工具的全过程,包括驱动签名问题的解决方法。通过禁用驱动程序强制签名,用户可以顺利安装并使用这款开源工具创建虚拟串口对,适用于软件开发测试、硬件调试等场景。文章还提供了验证虚拟串口功能的实用技巧和常见问题解决方案。

weixin_28720573的博客 389

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 374

6、哈代空间、算子函数及相关概念解析

本文深入探讨了数学中哈代空间与算子函数的核心概念,包括强函数的因式分解、半单零点的定义与性质、Blaschke-Potapov乘积的存在性、Nagy-Foias模型算子的结构与谱分析、可数集合的相关性质(如Carlesonian集合、稀有集合等)、简单分式族的可分性与基性质,以及指数型整函数的增长特性。文章还分析了这些数学对象之间的内在联系,并通过图表与表格形式直观呈现了集合性质与函数空间结构的关系。这些理论不仅在数学分析和泛函分析中具有重要意义,也在信号处理、量子力学等应用领域具有广泛价值。

yhn4567890的博客 170

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: Synchronized轻量级锁原理
下一篇: springboot基于微信小程序的在线办公系统+java+uinapp+Mysql
Java佳佳
博客等级 码龄4年 216粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值