面试网站今天来熟悉一下,关于JVM调优常用的一些参数。
注意:在通常情况下,服务器项目在运行过程中,堆空间会不断的收缩与扩张,势必会造成不必要的系统压力。-XX:NewSize=n 设置年轻代大小-XX:NewRatio=n 设置年轻代和年老代的比值。
所以在生产环境中,JVM的Xms和Xmx要设置成大小一样的,能够避免GC在调整堆大小带来的不必要的压力。
建议将 MetaspaceSize 和 MaxMetaspaceSize设置为同样大小,避免频繁扩容。栈参数设置
开启:-XX:+UseSerialGC 关闭:-XX:-UseSerialGC //新生代使用Serial 老年代则使用SerialOldParNew垃圾收集器(新生代)
开启 -XX:+UseParNewGC 关闭 -XX:-UseParNewGC //新生代使用功能ParNew 老年代则使用功能CMSParallel Scavenge收集器(新生代)
开启 -XX:+UseParallelOldGC 关闭 -XX:-UseParallelOldGC //新生代使用功能Parallel Scavenge 老年代将会使用Parallel Old收集器ParallelOl垃圾收集器(老年代)
开启 -XX:+UseParallelGC 关闭 -XX:-UseParallelGC //新生代使用功能Parallel Scavenge 老年代将会使用Parallel Old收集器CMS垃圾收集器(老年代)
开启 -XX:+UseConcMarkSweepGC 关闭 -XX:-UseConcMarkSweepGCG1垃圾收集器
开启 -XX:+UseG1GC 关闭 -XX:-UseG1GCGC策略参数配置
-XX:MaxGCPauseMillis堆占用了多少比例的时候触发GC,就即触发标记周期的 Java 堆占用率阈值。默认占用率是整个 Java 堆的 45%
-XX:InitiatingHeapOccupancyPercent=n新生代可容纳的最大对象,大于则直接会分配到老年代,0代表没有限制。
-XX:PretenureSizeThreshold=1000000 //进入老年代最小的GC年龄,年轻代对象转换为老年代对象最小年龄值,默认值7
-XX:InitialTenuringThreshol=7升级老年代年龄,最大值15
-XX:MaxTenuringThresholdGC并行执行线程数
-XX:ParallelGCThreads=16禁用 System.gc(),由于该方法默认会触发 FGC,并且忽略参数中的 UseG1GC 和 UseConcMarkSweepGC,因此必要时可以禁用该方法。
-XX:-+DisableExplicitGC设置吞吐量大小,默认99
XX:GCTimeRatio打开自适应策略,各个区域的比率,晋升老年代的年龄等参数会被自动调整。以达到吞吐量,停顿时间的平衡点。
XX:UseAdaptiveSizePolicy设置GC时间占用程序运行时间的百分比
GCTimeRatioDump异常快照
整个堆大小=年轻代大小 + 年老代大小 + 方法区大小-Xss128k 设置每个线程的堆栈大小。
内存溢出然后使用JVM参数进行调优,或者通过JVM工具和相关命令找到问题,然后解决问题。
内存泄漏
栈溢出
自己一定要动手,别人永远是别人的,自己体会了自己经历了,那才是自己的。最后给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |