JVM参数调优

本文详细介绍了JVM内存模型及其参数含义,分析了触发OutOfMemoryException异常的条件。针对内存泄漏问题,文章阐述了系统崩溃前的迹象,如何生成和分析堆dump文件,并推荐了Visual VM等分析工具。最后,文章探讨了JVM性能调优的目标与矛盾,提供了具体的JVM参数配置示例,以实现更高效的内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.JVM内存模型及JVM参数含义

二.OutOfMemoryException异常

    并不是内存耗尽才会抛出OOM异常,当满足以下两个条件将触发OOM:

  • JVM98%的时间花费在内存回收
  • 每次回收的内存小于2%

三.内存泄漏及解决方法

  1. 系统崩溃前的现象:GC的时间越来越长;Full GC的次数越来越多;老年代的内存耗尽越来越大

      2. 生成堆的dump文件:通过JMX的Mbean生成前的Heap信息,大小为整个堆大小的Hprof文件;通过Java的jmap命令用来生成该文件;通过JVM参数:-XX:+HeapDumpOnOutOfMemoryError  获取该文件

      3. 分析dump文件工具:Visual VM;IBM HeapAnalyzer;JDK自带的Hprof工具

      4. 分析内存泄漏

四、性能调优(JVM参数)

      1.目标:GC的时间足够短;GC的次数足够少;发生Full GC的周期足够小

         矛盾点:前两个目标相悖,GC的时间足够短,则需要一个更小的堆;GC的次数足够少,则需要一个更大的堆,只能取其平衡

      2.举例:-Xms1024m -Xmx1024m -Xss512K -XX:PermSize=256m -XX:MaxPermSize=256m

                  -Xms1024m:堆内存的初始值设置为1024m

                  -Xmx1024m:堆内存的最大值设置为1024m

                  -Xss512K:每个线程的堆栈大小设置为512K

                  -XX:PermSize=256m:永久代的初始值设置为256m

                  -XX:MaxPermSize=256m:永久代的最大值设置为256m

           将堆的最大值和最小值设置为相同值,可以防止垃圾收集器在最大、最小之前收缩堆而产生额外的时间。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值