JVM 调优

9 篇文章 0 订阅
订阅专栏

目录

1、内存泄漏与内存溢出

1、内存泄漏

2、内存溢出

2、提高垃圾回收效率的方法

3、常用的命令

4、常用的JVM参数

1、设置堆内存大小

2、设置新生代内存大小

3、设置元空间内存大小

4、设置使用哪种垃圾回收器

5、记录垃圾回收日志


1、内存泄漏与内存溢出

内存泄漏与内存溢出的区别:

  • 内存泄漏:不再被使用的对象占用的内存空间,本应该被释放,但没有被垃圾回收掉。
  • 内存溢出:在程序运行中,无法申请到足够的内存资源。

1、内存泄漏

产生原因:

  • 使用静态的集合类。静态变量不会被垃圾回收,而集合占用的内存又一般很大。
  • 各种连接没有及时关闭,比如数据库连接、IO连接
  • 一些强引用的对象,在不使用后没有置为null,导致无法被回收
  • 变量的作用域设置不合理,存活周期过长
  • 过多的单例模式类

解决方案:

  • 避免在循环中创建对象,尽量复用对象
  • 及时释放无用的对象引用
  • 少用静态集合
  • 及时关闭连接
  • 对于String的操作,使用StringBuilder或者StringBuffer,不要直接拼接字符串

2、内存溢出

内存溢出的情况:

  • 虚拟机栈和本地方法栈溢出
    • 如果线程请求的栈深度,大于虚拟机允许的栈深度,抛出StackOverflowError
    • 如果虚拟机在扩展栈时,无法申请到足够的内存空间,抛出OutOfMemoryError
  • 堆溢出
    • 遇到堆溢出,必须先判断,到底是发生了内存泄漏还是内存溢出
    • 如果是内存泄漏,通过工具查看泄漏对象到 GC Roots 的引用链,找到泄漏对象无法被垃圾收集器自动回收的原因。
    • 如果不是内存泄漏,而且代码看不出问题,就考虑增大虚拟机的内存参数(-Xmx 与-Xms)
  • 方法区溢出
    • 考虑修改方法区占用的内存大小
  • 运行时常量池溢出

内存溢出的原因:

  • 内存中加载的数据过于庞大
  • 代码中存在死循环,或者存在大量对象的创建
  • 虚拟机内存参数设置过小

内存溢出的解决方案:

  • 修改JVM内存参数。一般将-Xms 和-Xmx 设置成相同的值,避免每次GC后调整堆的大小。堆一般设置为物理内存的80%
  • 检查错误日志,查看内存溢出背后的实际原因
  • 对代码进行走查和分析,排查产生错误的代码
  • 使用内存查看工具,动态地监视内存的使用情况,尝试复现内存溢出的场景,进而发现问题。

2、提高垃圾回收效率的方法

  • 对象不再使用时,及时将它显式置为null,方便垃圾收集器快速判断
  • 少用 System.gc(),因为它会触发Full GC
  • 少用静态变量。静态变量会作为GC Roots,永远不会回收。
  • 对于String的操作,使用StringBuilder或者StringBuffer,不要直接拼接字符串。因为会在堆上产生很多额外的字符串对象
  • 分散对象创建和销毁的时机,不要突然创建或销毁大量对象,因为这样可能会触发Full GC
  • 少用finalize()方法,会加重垃圾回收的负担
  • 善用弱引用与软引用类型,不要全部使用强引用
  • 能用基本数据类型,就不要使用包装类型。因为包装类型占用了更大的内存
  • 增大堆内存,可以减少垃圾回收的频率。

3、常用的命令

4、常用的JVM参数

1、设置堆内存大小

-Xms<heap size>[unit] 
-Xmx<heap size>[unit]
  • heap size:内存大小
  • unit:单位,比如k、m、g

比如要设置最小为2G,最大为5G:

-Xms2g -Xmx5g

2、设置新生代内存大小

默认新生代的内存是1G左右,最大无上限

有两种设置新生代内存大小的方式:

指定最小值和最大值

-XX:NewSize=<young size>[unit] 
-XX:MaxNewSize=<young size>[unit]

规定新生代内存为一个固定值

-Xmn256m 

设置新生代与老年代的比值

-XX:NewRatio=1
  • 含义是,整个新生代(包括Eden、From Survivor、To Survivor)和老年代的内存占比

3、设置元空间内存大小

由于元空间是在直接内存上的,而直接内存对应着宿主机物理内存。

所以如果不对元空间的大小做限制,随着运行创建了大量的类,有可能会耗尽宿主机的所有内存。

设置元空间的最小值和最大值

-XX:MetaspaceSize=N
-XX:MaxMetaspaceSize=N

4、设置使用哪种垃圾回收器

-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParNewGC
-XX:+UseG1GC

5、记录垃圾回收日志

-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=< number of log files > 
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log

JVM实践 ⼀、JVM准备⼯作 实验报告 pdf
01-02
JVM实践 ⼀、JVM准备⼯作 1. 机器环境: 机器 CPU 内存 单机 4C 16G 2. 默认启动参数 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256 -XX:MetaspaceSiz e=128m -XX:MaxMetaspaceSize=320m" JAVA_...
jvm
热门推荐
白大锅的博客,毕设WangLoveBai_999
11-18 12万+
一、jvm内存 主要的目的是减小GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC由于须要对整个堆进行回收,因此比较慢,所以应该尽量减小Full GC的次数。数组 2.致使Full GC的缘由缓存 1)年老代(Tenured)被写满服务器 时尽可能让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要建立过大的对象及数组避免直接在旧生代建立对象 。并发 2)持久代Pemanet Generation空间不
JVM
CACSDN的博客
05-28 7142
因此,建议在之前先进行性能分析和监测,针对性地整参数,并进行实际测试和验证,以确保化的效果和稳定性。每个参数都有特定的作用和含义,根据具体需求和应用程序的特点,选择适当的参数进行配置和整。:垃圾回收是JVM的重要功能,但不恰当的垃圾回收策略可能导致长时间的停顿和性能下降。JVM旨在选择合适的垃圾回收器、整垃圾回收参数,平衡吞吐量和停顿时间,减少垃圾回收对应用程序的影响。通过选择合适的垃圾回收器算法和参数,整垃圾回收策略,可以降低垃圾回收的频率,提高系统的运行效率。
JVM实战
weixin_43647964的博客
04-23 909
JVM是Java应用程序的运行环境,JVM化Java应用程序性能的重要手段。JVM需要根据实际情况进行,因此需要对应用程序的整体架构有一定了解,才能进行科学合理的。本文将从JVM的基本原理、JVM的意义、JVM的方法和一些实战案例等方面进行详细介绍。JVM化Java应用程序性能的重要手段,需要根据实际情况进行。在进行JVM时,需要对应用程序的整体架构有一定的了解,包括程序的使用情况、数据量、并发量等因素,才能进行科学合理的
JVM 分析 如何进行JVM
weixin_43749805的博客
06-13 1134
为了找出问题的根源,通过分析堆栈日志,我们可以了解每个线程在执行过程中的状态和行为,从而找到性能瓶颈和潜在的问题。频繁的Full GC:如果应用程序中频繁发生Full GC,即对整个堆进行回收的情况,这可能会导致较长的停顿时间和性能下降。大量占用内存的本地缓存:如果应用程序中使用了大量的本地缓存,并且占用了大量的内存空间,可能会导致内存不足的问题。内存异常:如果应用程序经常遇到内存异常,如OutOfMemoryError,表明应用程序的内存使用超出了JVM的限制,需要来提高内存的利用率和稳定性。
JVM】如何进行JVM?一篇文章就够了!
vincewm的博客
09-21 7134
深入解读JVM性能的监控、定位和方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM的方案。
JVM思路
张矜持的博客
01-08 1971
JVM思路
JVM参数
360°顺滑
12-12 1万+
JVM参数配置方式内存参数合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 JVM参数 配置方式 java [options] MainClass [arguments] options - JVM启动参数。 配置多个参数的.
如何进行 JVM
xiaotiangjfjfj的博客
06-30 1595
如何进行jvm
springboot-jvm
Java自学笔记-springBoot微服务
12-11 1041
JVM,使用jvisualvm,jconsole,jmap,jps等。
jvm步骤
星月IWJ
08-12 5650
jvm JVM的一般步骤为: 第1步:分析GC日志及dump文件,判断是否需要化,确定瓶颈问题点; 第2步:确定JVM量化目标; 第3步:确定JVM参数(根据历史JVM参数来整); 第4步:一台服务器,对比观察前后的差异; 第5步:不断的分析和整,直到找到合适的JVM参数配置; 第6步:找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。 -XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。
JVM篇.pdf
09-12
JVM
JVM技巧
08-30
JVM深入理解,JVM技巧
JVM面试资料:JVM结构、JVM、四大垃圾回收算法、七大垃圾回收器
10-26
JVM面试资料。 JVM结构:类加载器,执行引擎,本地方法接口,本地内存结构; 四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 ...JVM:命令行指令,设置堆内存大小的参数
java高级篇:JVM.mp4
09-19
分析常见的JVM技术及其相关条件,以及在实战中怎么使用到相关的技术进行,比较适合中高级开发进行学习,适合对JVM理解较深的开发学习
JVM化之使用Jstack命令查找JVM死锁
qq_41139119的博客
05-20 191
JVM化之使用Jstack命令查找JVM死锁
JVM学习-垃圾回收(三)
最新发布
丢爸
05-23 649
Safe Point选择很重要,如果太少可能导致GC等待的时间太长,如果太频繁可能导致运行时的性能问题,大部分指令的执行时间都非常短暂,通常会根据“程序在执行时并非所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这个位置称为安全点(SafePoint)”为标准,比如:选择一些执行时间较长的指令作为Safe Point,如方法用、循环跳转和异常跳转等。,我们也可以把Safe Region看作扩展了的SafePoint。
c#数据库的增删改查
weixin_46657636的博客
05-17 435
*
Java内存模型:介绍Java内存模型的概念,以及其中的happens-before关系作用,从而更好地理解并发程序中潜在的问题
哎 你看的博客
05-20 1183
Java内存模型简介:1.1 定义和目的1.2 与物理硬件的映射1.3 Java内存区域(堆、栈、方法区等) Java内存模型的主要组成部分:2.1 线程隔离2.2 原子性规则2.3 有序性规则2.4 可见性规则 Happens-Before关系:3.1 定义和目的3.2 各种Happens-Before规则 (程序顺序规则、锁规则、volatile变量规则、传递性等)3.3 示例分析 Java内存模型对并发编程的影响:4.1 数据不一致问题4.2 数据竞争4.3 原子性、有序性、可见性在并发编程中的应用
jvm pdf
07-30
JVM是指对Java虚拟机(JVM)进行化,以提高Java程序的性能和运行效率。PDF是一种常见的电子文档格式。那么,JVM与PDF之间有哪些关系呢? 首先,JVM可以改善Java程序的执行效率,使得程序在JVM上的...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 前端启动项目npm run dev报错npm ERR! missing script: dev 13862
  • Spring MVC-@RequestMapping注解详解 3785
  • 在idea中移除子模块如何Moudle后重新导入 3529
  • Java常用集合之Set 2158
  • 线程的死锁、活锁和饥饿现象 2059

分类专栏

  • 深入理解Java虚拟机 9篇
  • 计算机网络 3篇
  • 消息队列MQ 1篇
  • 云原生 1篇
  • 数据库 1篇
  • Java并发编程 12篇
  • 部分踩坑案例 5篇
  • 刷题日记 95篇
  • 算法学习历程 81篇
  • 备战蓝桥杯 64篇
  • Java基础 6篇
  • Java常用框架 11篇
  • Redis学习 3篇
  • Linux 1篇

最新评论

  • 前端启动项目npm run dev报错npm ERR! missing script: dev

    Sqgziiii_: 感谢!解决了

  • Java的mysql报错,格式错误 Cause: java.lang.NumberFormatException: For input string: “admin1“

    Leo1020.: 我也是这个错误,其实原来的也可以,就是单引号内不能有空格

  • Java的使用@SpringBootTest里的Autowired注入对象为null

    PSLLHC: 谢谢

  • MQ专题1-消息队列的执行原理

    m0_70854869: 对我很有价值,博主很棒

  • 详细解析wait/notify

    猛_牛: 无人子弟的结论,对象锁在方法里,明显可以并发,你这测出来不并发是因为线程上下文切换慢了。你调大 sleep 试试。。。。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • MQ专题1-消息队列的执行原理
  • 云知识入门-什么是虚拟机、磁盘、镜像和快照
  • MySQL 三大日志日志:undo log、redo log、binlog
2023年114篇
2022年49篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司枣庄品牌网站设计推荐盐城百度网站优化推荐镇江网络广告推广张北SEO按天计费报价大芬英文网站建设公司木棉湾关键词按天收费价格伊犁网站优化按天扣费多少钱淄博外贸网站建设推荐六安百搜标王多少钱临沧网站推广方案邢台营销网站哪家好宁德外贸网站设计报价潜江网站优化推荐淮南关键词按天扣费推荐德宏外贸网站设计公司泰州网站定制公司清徐企业网站改版报价渭南高端网站设计公司吴忠百姓网标王推广多少钱霍邱建站推荐淮南网站优化推广公司安顺企业网站制作价格泸州网站优化按天计费价格黔西南网站优化按天计费报价诸城seo网站推广公司萍乡seo报价深圳网站优化按天计费多少钱坂田优化推荐太原百度标王推荐龙华网站优化推广公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化