GC调优配置参数

GC调优配置参数,第1张

一、JVM调优主要是调整下面两个指标

1. 停顿时间 :垃圾收集器做垃圾回收中断应用执行的时间。 -XX:MaxGCPauseMillis

2. 吞吐量 :垃圾收集的时间和总时间的占比:1/(1+n),吞吐量计算公式为1-1/(1+n), 吞吐量越大,证明性能越好。 -XX:GCTimeRatio=n

二、GC调优步骤

1. 打印GC日志

        -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log

       Tomcat则直接加在JAVA_OPTS变量里

* 分析日志得到关键性指标

* 分析GC原因,调优JVM参数(工具:gceasy,GCViewer)

2. GC常用参数

堆栈设置

    -Xss:每个线程的栈大小

    -Xms:初始堆大小,默认物理内存的1/64

    -Xmx:最大堆大小,默认物理内存的1/4

    -Xmn:新生代大小

    -XX:NewSize:设置新生代初始大小

    -XX:NewRatio:默认2,表示新生代占老年代的1/2,占整个堆内存的1/3

    -XX:SurivivorRatio:默认8,表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存

    -XX:MetaspaceSize:设置元空间大小

    -XX:MaxMetaspaceSize:设置元空间最大允许大小,默认不受限制,JVM Metaspace会进行动态扩展

垃圾回收统计信息

    -XX:+PrintGC

    -XX:+PrintGCDetails

    -XX:+PrintGCTimeStamps

    -Xloggc:filename

收集器设置:

    -XX:+UseSerialGC:设置串行收集器

    -XX:+UseParallelGC:设置并行收集器

    -XX:+UseParallelOldGC:老年代使用并行收集器

    -XX:+UseParNewGC:在新生代使用并行收集器

    -XX:+UseConcMarkSweepGC:设置CMS并行收集器

    -XX:UseG1GC:设置G1收集器

并行收集器设置:

     -XX:ParallelGCThreads:设置用于垃圾回收的线程数

    -XX:MaxGCPauseMillis:设置并行收集最大暂停时间

    -XX:GCTimeRatio:设置垃圾回收时间占程序运行时间的百分比

    -XX:YongGenerationSizeIncrement:年轻代GC后扩容的比例,默认是20%

CMS收集器设置

    -XX:+UseConcMarkSweepGC:设置CMS并发收集器

    -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况

    -XX:ParallelGCThreads:设置并发收集器的线程数

    -XX:CMSFullGCsBeforeCompanction:设定进行多少次CMS垃圾回收后,进行一次内存压缩

    -XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收

    -XX:UseCMSInitiatingOccupancyOnly:表示只在到达阈值的时候,才进行CMS回收

    -XX:+CMSIncrementalMode:设置为增量模式,适用于单CPU情况

    -XX:ParallelCMSThreads:设定CMS的线程数量

    -XX:CMSInitiatingOccupancyFraction:设置CMS收集器袭启友在老年代拍槐空间被使用多少后触发

    -XX:+UseCMSCompactAtFullConllection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理

G1收集器设置旁茄

    -XX:+UseG1GC:使用G1收集器

    -XX:ParallelGCThreads:设置并发收集器的线程数

    -XX:G1HeapRegionSize:制定分区大小(1MB~32MB,必须是2的幂),默认将整个堆划分为2048个分区

    -XX:GCTimeRatio:吞吐量大小,0-100的整数(默认9),值为n则系统将花费不超过1/(1+n)的时间用于垃圾回收

    -XX:MaxGCPauseMillis:目标暂停时间(默认200ms)

    -XX:G1NewSizePercent:新生代内存初始空间(默认堆的5%)

    -XX:G1MaxNewSizePercent:新生代内存最大空间

    -XX:TargetSurvivorRatio:Survivor填充容量(默认50%)

    -XX:MaxTenuringThreshold:最大任期阈值(默认15%)

    -XX:InitiatingHeapOccupancyPercen:老年代占空间超过整堆比IHOP阈值(默认45%),超过则进行混合收集

    -XX:G1HeapWastePercent:堆废物百分比(默认5%)

垃圾回收(gc)算法无非都是给每一块分配的内存提供引橘芹用计数,然后通过智能指针(smart pointer)自动完成引用计数的加减,如果引用技术减少到零,就代表没有人使用该内存了,这块内存就可以回收了。

garbage collector(gc)

如果可以正确的遵从这种gc的使用规则,也就是说你可以正确无误的使用智能指针,那么虚伍雹理论上来说,就不可能存在内存泄漏。

但是现实并不象想象的那么单纯,那么美好。一方面,智能指针的概念仍然没有被C++社区广泛的理解应用,而且智能指针种类繁多,各有各的规则,在代码量多了的时候,有时存在这样那样的失误难免;另一方面(应该是更加令人为难的一点),并不是所有人都那么喜欢用智能指针,而且原生指针的使用很多情形下避无可避,差帆我们不得不在原生指针与智能指针之间进行转换。

所以这样的gc的最终结果是,掌握引用计数的规则最终似乎比掌握new/delete的规则容易不了多少,有时甚至让新接触该技术的程序员感到畏惧。另外,引用计数的引入,出乎意料的产生了一个负作用:调试内存泄漏变得比原先困难多了。

所以引用计数和智能指针实现的gc不能从根本上解决内存泄漏问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12442867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存