JVM之配置介绍(一)

37 篇文章 0 订阅
7 篇文章 0 订阅

基础配置

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

注:最大内存可以设置为与-Xms相同,用来避免每次垃圾回收完成后重新分配内存。

  • XX:MinHeapFreeRation可改变JVM最小剩余堆内存大小比例,增大到指定最大内存
  • XX:MaxHeapFreeRation可改变JVM最大剩余堆内存大小比例,减小到指定最小内存
  • Xmn2g设置年轻代大小为2G,堆大小=年轻带大小+老年代大小+永久代(元空间)大小;所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
  • Xss128k设置每个线程堆栈的大小;相同物理环境下,减小值能生成更多的线程,但是操作系统中同一个进程内的线程数是有限制的,不能无限生成,经验值在3000~5000左右。
  • XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与老年代的比值设置为4,则年轻代与老年代所占比值为1:4,年轻代占整个堆栈的1/5。
  • XX:SurvivorRatio=4:设置年轻代中Eden区和Survivor区的比值设置为4,则Eden去和两个Survivor区的比值为4:2,一个Survivor去占整个年轻代的1/6。
  • XX:MaxPermSize=16m:设置持久代大小为16m。
  • XX:MaxTenuringThreshold=4:设置垃圾最大年龄,如果设置为0,则年轻代对象不经过年轻代直接进入老年代,可以提高效率。如果值较大,则会在年轻代中频繁复制,造成CPU的使用。
  • XX:+PrintGCDetails:输出打印垃圾回收的详细日志

内存溢出配置

  • XX:+HeapDumpOnOutOfMemoryError
  • XX:HeapDumpPath=/var/log/jvm/app -XX:ErrorFile=/var/log/jvm/app/java_error_%p.log内存溢出时将错误日志输出到指定日志文件中。

回收器选择

JVM给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,

  • XX:+UseParallelGC选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
  • XX:ParallelGCThreads=20配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
  • XX:+UseParallelOldGC配置年老代垃圾收集方式为并行收集。
  • XX:MaxGCPauseMillis=100设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
  • XX:+UseAdaptiveSizePolicy设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
  • XX:+UseSerialGC 设置串行收集器

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

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

  • XX:+UseConcMarkSweepGC设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
  • XX:+UseParNewGC设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
  • XX:CMSFullGCsBeforeCompaction 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
  • XX:+UseCMSCompactAtFullCollection 打开对年老代的压缩。可能会影响性能,但是可以消除碎片

垃圾回收统计信息

  • XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,程序未中断的执行时间
  • XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间。
  • XX:PrintHeapAtGC 打印GC前后的详细堆栈信息

更多文章和干货请移驾公众号查看获取

公众号

本文作者:Java技术债务
原文链接:https://www.cuizb.top/myblog/article/1642766982
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java技术债务

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值