Java-JVM的内存调优

Java JVM调优实战指南:从内存模型到高频参数 Young GC频率降低60%,平均耗时缩短至20ms。:某电商平台在秒杀活动期间,订单服务频繁出现超时,显示Young GC耗时超过50ms。:没有银弹参数,只有最适合业务的配置!,需结合监控工具与业务场景灵活调整。JVM调优的核心在于。 阅读详情

首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。

对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC一般由于以下几种情况:

  • 旧生代空间不足
    调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象 
  • Pemanet Generation空间不足
    增大Perm Gen空间,避免太多静态对象 
  • 统计得到的GC后晋升到旧生代的平均大小大于旧生代剩余空间
    控制好新生代和旧生代的比例 
  • System.gc()被显示调用
    垃圾回收不要手动触发,尽量依靠JVM自身的机制 

调优手段主要是通过控制堆内存的各个部分的比例和GC策略来实现,下面来看看各部分比例不良设置会导致什么后果

1)新生代设置过小

一是新生代GC次数非常频繁,增大系统消耗;二是导致大对象直接进入旧生代,占据了旧生代剩余空间,诱发Full GC

2)新生代设置过大

一是新生代设置过大会导致旧生代过小(堆总量一定),从而诱发Full GC;二是新生代GC耗时大幅度增加

一般说来新生代占整个堆1/3比较合适

3)Survivor设置过小

导致对象从eden直接到达旧生代,降低了在新生代的存活时间

4)Survivor设置过大

导致eden过小,增加了GC频率

另外,通过-XX:MaxTenuringThreshold=n来控制新生代存活时间,尽量让对象在新生代被回收

由上一篇博文JVM学习笔记(三)------内存管理和垃圾回收可知新生代和旧生代都有多种GC策略和组合搭配,选择这些策略对于我们这些开发人员是个难题,JVM提供两种较为简单的GC策略的设置方式

1)吞吐量优先

JVM以吞吐量为指标,自行选择相应的GC策略及控制新生代与旧生代的大小比例,来达到吞吐量指标。这个值可由-XX:GCTimeRatio=n来设置

2)暂停时间优先

JVM以暂停时间为指标,自行选择相应的GC策略及控制新生代与旧生代的大小比例,尽量保证每次GC造成的应用停止时间都在指定的数值范围内完成。这个值可由-XX:MaxGCPauseRatio=n来设置

 

最后汇总一下JVM常见配置

  1. 堆设置
    • -Xms:初始堆大小
    • -Xmx:最大堆大小
    • -XX:NewSize=n:设置年轻代大小
    • -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
    • -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
    • -XX:MaxPermSize=n:设置持久代大小
  2. 收集器设置
    • -XX:+UseSerialGC:设置串行收集器
    • -XX:+UseParallelGC:设置并行收集器
    • -XX:+UseParalledlOldGC:设置并行年老代收集器
    • -XX:+UseConcMarkSweepGC:设置并发收集器
  3. 垃圾回收统计信息
    • -XX:+PrintGC
    • -XX:+PrintGCDetails
    • -XX:+PrintGCTimeStamps
    • -Xloggc:filename
  4. 并行收集器设置
    • -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
    • -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
    • -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
  5. 并发收集器设置
    • -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
    • -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

附:

本系列学习资料主要来自博文http://rednaxelafx.javaeye.com/blog/656951里提到的PPT和《分布式Java应用》里有关JVM的章节,推荐大家继续深入学习

深入理解 Java 虚拟机(JVM):性能调优与内存管理 JVM 内存模型定义了虚拟机的内存区域及其管理方式。理解这些内存区域及其管理机制是性能调优的基础。堆(Heap)堆是用于存储对象的内存区域,几乎所有的 Java 对象和数组都在这里分配内存。堆内存可以分为年轻代(Young Generation)和老年代(Old Generation)。年轻代:存储新创建的对象,垃圾回收频繁发生。年轻代通常包括 Eden 区和两个 Survivor 区。老年代:存储长时间存活的对象,垃圾回收频率相对较低。方法区(Method Area) 阅读详情

相关推荐

Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题

在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱。 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合集,助力小伙伴们顺利进大厂~ 小编根据C4认证的成长路径整理了Java的相关资源,从零基础带你进入Java的世界。 欢迎大家扫描文末二维码,一起学习~ 一、JVM原理 【JVM原理最全、清晰、通俗讲解,五天40小时吐血整理】 【JVM工作原理】 【初探JVM原理与结构】 【JVM原理和.

优快云能力认证官方博客 2498

java之JVM调优

文章来源:https://blog.youkuaiyun.com/a2572371/article/details/78202874 一.根据Java虚拟机规范,JVM将内存划分为: 1.New(年轻代) 2.Tenured(年老代) 3.永久代(Perm)(备注:jdk1.8之后 改为元本地元空间) 其中,New和Tenured属于堆内存。-xmx:指定jvm堆内存最大值,-xms:jvm堆初...

感冒石头的博客 4029

【JVM】Java虚拟机JVM堆内存调优

JVM堆内存调优是Java性能优化的重要部分,主要目的是为了确保程序稳定运行并充分利用系统资源。

No8g攻城狮的博客 2809

【JVM调优】如何进行JVM调优?一篇文章就够了!

深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。

种一棵树最好的时间是十年前,其次是现在 4万+

Java性能调优:内存管理与垃圾回收的生死时速——从JVM底层到实战调优的终极指南

本文深入探讨了JVM内存管理与垃圾回收的机制与调优策略。首先,文章介绍了JVM内存结构,包括堆内存、元空间和本地内存的划分及其作用。接着,详细解析了对象的生命周期,从Eden区到老年代的流转过程。随后,文章对比了传统与现代垃圾回收算法,如Serial、Parallel、CMS、G1、ZGC和Shenandoah,分析了它们的特点与适用场景。在内存调优部分,文章提供了堆内存和堆外内存的优化建议,并强调了GC日志和堆转储分析在排查内存问题中的重要性。通过代码示例和配置建议,本文为开发者提供了实用的内存管理与调优

墨夶的博客 746

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...

weixin_41168304的博客 20万+

Java基础 | JVM 调优

Java基础 | JVM 调优

qq_20236937的博客 2614

ESP8266连接阿里云(STM32)

一、概述 之前通过串口调试助手+ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266进行串口通信,相当于使用STM32代替之前使用的串口调试助手来发送AT指令。只是发送的字符串数据可能有些细节需要注意一下。 二、保存连接的AT指令 定义几个字符串数据保存需要发送的AT指令 //注意: //末尾记得加\r\n //字符...

xyx0610的博客 4万+

Java学习-JVM调优

Java学习之JVM调优包含了JDK工具包、第三方工具、JVM参数、调优等

qq_56760790的博客 1892

本届挑战赛亚军方案:基于大模型和多AGENT协同的运维

我们分别构建了异常检测基础模型,一旦系统接受到异常即会通知LLM主管Agent,主管Agent对异常问题进行决策与子领域Agent进行桥接,多个子领域Agent协同工作,实现运维故障自动诊断和多个任务模型的编排,提升运维效率。

weixin_52705010的博客 2292

临床预测模型R语言全流程实战:从建模到Bootstrap验证的完整代码

临床预测模型是利用患者特征预测疾病结局发生概率的重要统计工具,其核心在于通过Logistic回归或Cox比例风险模型建立风险函数,并借助ROC曲线、校准曲线等指标评估模型的区分度与校准度。Bootstrap内部验证和DCA决策曲线分析则是当前审稿人关注的焦点,前者用于校正过拟合带来的乐观估计,后者用以判断模型在临床决策中的实际净获益。在肿瘤预后、慢病风险评估等场景中,基于R语言的模型构建与列线图可视化已成为论文发表的关键环节。本文以survival包自带肺癌数据为例,系统展示从数据预处理、变量筛选到多因素建

weixin_33483304的博客 239

java超详细的jvm调优

java超详细的jvm调优

记录开发日常笔记 4890

【硬件设计】_基于STM32单片机的智能台灯系统

智能台灯系统是一款多功能的智能照明设备,能够自动调节亮度、监测人体活动、感知环境光照,并具备定时和报警功能,极大提升了用户体验与功能的灵活性,主要包括以下功能:系统提供自动和手动两种模式以调节台灯亮度。在自动模式下,台灯会根据周围光强智能调整;而在手动模式下,用户可通过按键自行设置亮度。利用红外光电开关检测台灯与用户之间的距离,若距离过近,系统将发出报警提示。通过时钟模块设置定时提醒,并在OLED显示屏上显示当前时间,当达到设定的定时时间时,蜂鸣器将发出报警音。

2401_85381181的博客 1729

【Java】Java JVM 调优实战:GC 调优参数 + 内存泄漏排查,线上性能提升实战

在高并发、高可用的线上系统中,Java 应用的性能直接决定了业务的承载能力与用户体验。JVM 作为 Java 程序的运行基石,其内存分配、垃圾回收(GC)机制的表现的核心。若 JVM 配置不合理,可能导致频繁 Full GC、内存溢出(OOM)、响应延迟飙升等问题,严重时引发系统雪崩;而科学的 JVM 调优能充分挖掘硬件资源潜力,减少 GC 停顿时间,避免内存泄漏,让系统在高负载下保持稳定高效运行,这也是中级开发者迈向高级工程师的必备技能。

lbbxmx111的博客 1249

安防相机宽动态(WDR)技术解析:从原理到实战应用

本文深入解析安防相机宽动态(WDR)技术原理,对比多次曝光与DOL-WDR等实现方式,并区分硬件WDR与数字WDR(DWDR)的本质差异。文章重点阐述了WDR在逆光出入口、夜间道路监控等五大典型场景的实战应用与调参技巧,旨在帮助用户根据实际需求正确选择与配置,确保监控系统在复杂光线下清晰成像。

weixin_29191081的博客 424

威联通改装飞牛fnOS全攻略:从刷机到Docker影视部署

NAS系统是家庭数字存储的核心,x86架构的威联通设备凭借通用引导和驱动支持,成为改装替代系统的理想平台。飞牛fnOS作为基于Debian的国产NAS系统,以简洁UI、内置Docker和影视墙以及硬件转码能力,吸引了大量玩家。通过U盘引导安装、BIOS调整、系统盘SSD部署,可实现系统切换;原机械硬盘可挂载为存储池,配合Docker部署下载、远程访问等容器,影视中心自动削刮海报墙,硬件转码保障4K播放。改装过程需注意引导失败、硬盘识别、核显驱动等问题。这套方案能让老旧威联通焕发新生,兼顾易用性与扩展性。本文

weixin_33585822的博客 722

《Java性能优化:从JVM内存模型到GC调优》

JVM内存模型和垃圾回收机制是Java性能优化的核心。通过合理设置堆内存、选择合适的垃圾回收器以及分析GC日志,可以显著提升Java应用程序的性能。希望本文的内容能够帮助你更好地理解和优化Java程序。这篇文章详细分析了JVM内存模型、垃圾回收机制以及调优策略,并提供了代码示例,适合发布在优快云上。如果需要进一步调整或补充,请随时告诉我!

2303_78307248的博客 1191

迟滞比较器原理及计算

为什么要用迟滞比较器 在讲迟滞比较器之前,我们先看一个案例。 在产品设计中常常需要用到电机,而电机在从运转到停止过程中需要泄放能量,这种能量大部分以电压的形式反馈回电源母线(Vbus)导致Vbus母线电压升高,特别是功率大又转速快的电机需要急刹时,产生的反馈电压更高,严重时可能导致母线上其他器件的损坏。 为了防止将电机反馈的能量泄放掉,我们需要设计一个电路来检测母线电压,当母线电压高于某一安全阈值时,打开MOSFET Q1将母线上的能量通过电阻R5以热的形式消耗掉。 假如用一般的比较器,设计如下: Vbu

sinat_15677011的博客 2万+

带你认识java内存结构、jvm调优

一、java内存结构 注:以上图片来自 蚂蚁课堂资料 1、类加载器子系统:负责加载class文件,将加载的信息存到一块称为方法区的内存中。 2、方法区:也称为永久区,存放了加载的类、static修饰的变量、常量、字符串字面量等。 3、java堆:堆内存由GC(垃圾回收器)自动管理,存放了通过new出来的对象(Studentstu = new Student();所以这里存...

huohua0612的专栏 304

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java中的JVM调优:从GC调优到内存分配的策略

GC(Garbage Collection)是JVM自动管理内存的重要机制,它能够自动释放不再使用的对象内存资源。通过对GC调优、内存分配、栈内存和堆外内存的理解与实践,Java开发者可以显著提升JVM的性能。在实际生产环境中,调优需要结合具体的应用场景,充分利用JVM提供的参数和工具进行诊断和优化。这段代码启动了G1垃圾回收器,设置了最大堆内存为2GB,最小堆内存为2GB,并指定最大GC停顿时间为200毫秒。在实际生产环境中,如何选择合适的GC算法和进行调优,往往需要根据系统的实际需求和应用场景。

技术研究中心 833

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JAVA系列之JVM内存调优

如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。堆内存是由年轻代和老年代构成,JDK1.8以后,永久代被元空间取代,使用直接内存,不占用堆内存。**-XX:+UseAdaptiveSizePolicy:**设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。**-Xss128k:**设置每个线程的堆栈大小。

sloveb123的博客 4507

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java的JVM内存模型深度剖析:GC机制与性能调优

JVM内存模型深度剖析:GC机制与性能调优

微风不留尘 1282

【Java内存模型与JVM调优全解析】:深入底层原理与实战调优策略

掌握Java性能优化核心方法,深入解析内存模型与JVM调优全链路策略。涵盖堆栈配置、GC算法选择、内存泄漏排查等关键场景,结合真实案例讲解高效调优技巧,提升系统稳定性与运行效率,【Java内存模型与JVM调优全解析】值得收藏。

LiteCode的博客 1081

【高级篇】Java JVM实战 之 内存调优

JVM之内存调优,Java进阶必备知识! 一起探索Java程序的秘密

wanghuichen的博客 1295

java内存模型+JVM调优+NIO和BIO

https://youzhixueyuan.com/redis-cache-and-mysql-data-consistency.html Java内存模型的目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。 其中的变量包括:实例字段、静态字段、构成数组对象的元素 不包括:局部变量与方法参数,因为它是线程私有的,不会共享。 Java内存模型规定:所有...

weixin_43321444的博客 309

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优

努力的人是幸福的,因为,努力的人有自己的目标,为了这个目标去努力,这个过程也许是很艰难的,当到达成功的时候,回味自己努力的坎坷,才会有成就感,才会有幸福。人的感情是丰富的,努力的人一定能去做到自己想做的事情,这样也会有幸福的。

IT小辉同学 1440
上一篇: Java-JVM的内存管理和垃圾回收
下一篇: 理解Java垃圾回收机制
NextX工作室
博客等级 码龄18年 21粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值