JVM参数配置详解

JVM参数配置详解java Xmx1g Xms1g Xmn700m Xss228k 默认设置 Xms 为 JVM 启动时申请的最小内存 默认为操作系统物理内存的 1 64 但小于 1G Xmx 为 JVM 可申请的最大内存 默认为物理内存的 1 4 但小于 1G 默认当空余堆内存小于 40 时 JVM 会增大 Heap 到 Xmx 指定的大小 可通过 XX MinHeapFreeR 来指定这个比列 当空余堆内存大于 70 时 J

JVM调优总结

默认设置

-Xms为JVM启动时申请的最小内存,默认为操作系统物理内存的1/64但小于1G
-Xmx为JVM可申请的最大内存,默认为物理内存的1/4但小于1G,默认当空余堆内存小于40%时,JVM会增大Heap到-Xmx指定的大小,可通过-XX:MinHeapFreeRation来指定这个比列;当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,可通过XX:MaxHeapFreeRation来指定这个比列。

堆大小设置

JVM 中最大堆大小有三方面限制:

  1. 相关操作系统的数据模型(32-bt还是64-bit)限制
  2. 系统的可用虚拟内存限制
  3. 系统的可用物理内存限制

32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。

典型设置(8G内存)

java -Xmx3500m -Xms3500m -Xmn2g -Xss128k 

-Xmx3500m 设置JVM最大可用内存为3550M。
-Xms3500m 设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g 设置年轻代大小为2G。整个堆大小 = 年轻代大小 + 年老代大小 + 持久代大小 持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。






java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0 

-XX:NewRatio=4 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4 设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m 设置持久代大小为16m。
-XX:MaxTenuringThreshold=0 设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。






内存溢出问题(HeapDumpOnOutOfMemoryError)

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/jvm/app -XX:ErrorFile=/var/log/jvm/app/java_error_%p.log

回收器选择

典型配置

java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 

-XX:+UseParallelGC 选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC 

-XX:+UseParallelOldGC 配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 

-XX:MaxGCPauseMillis=100 设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100-XX:+UseAdaptiveSizePolicy 

-XX:+UseAdaptiveSizePolicy 设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

响应时间优先的并发收集器

如上文所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。

典型配置

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 

-XX:+UseConcMarkSweepGC设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
-XX:+UseParNewGC 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection 

-XX:CMSFullGCsBeforeCompaction 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection 打开对年老代的压缩。可能会影响性能,但是可以消除碎片

辅助信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps 可与上面两个混合使用
-XX:+PrintGC

11.851: [GC 98328K->93620K(K), 0.0082960 secs]

-XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用

Application time: 0. seconds

-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间。可与上面混合使用

Total time for which application threads were stopped: 0.0 seconds

-XX:PrintHeapAtGC 打印GC前后的详细堆栈信息

常见配置汇总

堆设置

-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 设置持久代大小










收集器设置

-XX:+UseSerialGC 设置串行收集器
-XX:+UseParallelGC 设置并行收集器
-XX:+UseParalledlOldGC 设置并行年老代收集器
-XX:+UseConcMarkSweepGC 设置并发收集器






垃圾回收统计信息

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename






并行收集器设置

-XX:ParallelGCThreads=n 设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n 设置并行收集最大暂停时间
-XX:GCTimeRatio=n 设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)




并发收集器设置

-XX:+CMSIncrementalMode 设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads=n 设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216912.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:46
下一篇 2026年3月18日 上午10:47


相关推荐

  • pycharm3.7激活码破解方法

    pycharm3.7激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    72
  • 百度分享到qq空间失败

    百度分享到qq空间失败

    2021年9月19日
    50
  • Mysql忘记密码和密码重置

    Mysql忘记密码和密码重置**Mysql忘记密码和密码重置**环境:系统Windows10MySQL-8.0.23操作步骤:1、停止MySQL服务打开命令窗口cmd,输入命令:netstopmysql,停止MySQL服务2、开启跳过密码验证登录的MySQL服务打开命令窗口cmd,进入mysql安装目录下的bin目录,然后输入如下这条命令`mysqld–shared-memory–skip-grant-tables`3、重新打开一个cmd命令窗口,输入mysql命令就可以直接登录了,直接

    2022年6月17日
    21
  • JavaScript运行命令

    JavaScript运行命令

    2022年1月6日
    53
  • Matlab:语音信号处理与滤波

    Matlab:语音信号处理与滤波文章目录语音信号的采集对语音信号进行频谱分析设计数字滤波器利用滤波器进行滤波语音信号的采集首先利用win自带的录音机(没有的话手机录也行),录下一段语音信号,时间40秒左右。运用MATLAB对语音进行采样[x,fs]=audioread(‘D:\1234.mp3’);plot(x);出现如下的图对语音信号进行频谱分析处理语音信号的时域波形图对语音信号进行快速傅立叶变换,得到信…

    2022年5月9日
    182
  • PhpStorm2017.1版激活方法、汉化方法以及界面配置「建议收藏」

    PhpStorm2017.1版激活方法、汉化方法以及界面配置「建议收藏」本教程仅对2017.1版有效!!!!!!PhpStorm激活和汉化文件下载网址(提取密码:62cg)PhpStorm的介绍PhpStorm是一个轻量级且便捷的PHPIDE,其旨在提高用户效率,

    2022年7月2日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号