JVM参数解析与Java虚拟机性能调优

堆空间
    -Xms32m
        初始堆空间
    -Xmx32m
        最大可用堆空间
     -Xmn1m
        新生代的大小
    -XX:NewRatio=2
        老年代/新生代
    -Xss128K
        线程的最大栈空间
    -XX:TargetSurvivorRatio=15
        survivor区的目标使用率


    堆溢出处理
        -XX:+HeapDumpOnOutOfMemoryError
            导出内存溢出时整个堆信息
        -XX:HeapDumpPath=d:/a.dump
            导出堆dump文件的存放路径 
        -XX:-UseGCOverheadLimit
            禁止GC效率低下引起的OOM
    设置相等
        减少程序运行时进行垃圾回收次数,从而提高程序的性能
    基本策略
        尽可能将对象预留在新生代,减少老年代GC的次数

JVM优化
    -XX:+UseCompressedOops
        开启压缩(默认)
            允许在64位JVM中内存引用地址为32位
    -XX:+DoEscapeAnalysis
        开启逃逸分析 (默认)
    -XX:+EliminateAllocations
        标题替换(默认)
    TLAB
        -XX:+UseTLAB
            开启TLAB(l默认)
                TLAB
                    Thread Local Allocation Buffer
                    线程本地分配缓存
        -XX:+PrintTLAB
            打开跟踪TLAB参数
         -XX:TLABSize=102400
            手工指定TLAB的大小
        -XX:-ResizeTLAB
            禁用自动调整TLAB的大小
        -XX:TLABRefillWasteFraction=100
            TLAB中允许产生浪费的比例(默认值为64)
                约为1/64的TLAB空间大小作为 refill_waste

垃圾回收
    垃圾回收器
        -XX:+UseParallelGC
            新生代使用ParallelGC回收器,老年代使用串行收集器
        -XX:+UseConcMarkSweepGC
            新生代使用ParNew回收器,老年代使用CMS
        串行回收器
            -XX:+UseSerialGC
                新生代、老年代都使用串行垃圾回收器
            -XX:SurvivorRatio=2
                新生代中 eden空间和from/to空间的比例关系 
            -XX:PretenureSizeThreshold=1000 
                对象直接晋升到老年代的阈值
            -XX:MaxTenuringThreshold=15
                新生代对象的最大年龄(默认15)
        并行GC
            -XX:+UseParNewGC
                新生代使用ParNew回收器,老年代使用串行收集器
            -XX:+UseParallelOldGC
                新生代使用ParallelGC回收器,老年代使用ParallelOldGC回收器
            -XX:ParallelGCThreads
                ParNew回收器线程数量
                    CPU数量
                        CPU数量大于8时
                            CPU_Count*5/8+3
            -XX:MaxGCPauseMillis
                设置最大垃圾收集停顿时间
                    使用较小的堆
            -XX:GCTimeRatio
                设置吞吐量大小
                    系统将花费不超过1/(1+n)的时间用于垃圾收集
                        默认情况下 1/(1+99)
            -XX:UseAdaptiveSizePolicy
                打开自适应的GC策略
                    自动调整:新生代的大小、eden和survivior的比例、晋升老年代的对象年龄等
        CMS
            -XX:+UseConcMarkSweepGC
                启用CMS回收器
            -XX:-CMSPrecleaningEnabled
                CMS 不进行预清理
            -XX:ParallelCMSThreads
                并发线程数量
                    如果不配置此项目,默认并发线程数是(ParallelGCThreads+3)/4
                        ParallelGCThreads
                            GC并行时使用的线程数量
            -XX:CMSInitiatingOccupancyFraction
                指定当老年代空间使用率真达到多少时,进行一次CMS垃圾回收
                    默认是68
                        大
                            降低CMS的触发频率
                                内存不足导致CMS回收失败,启动老年代串行收集器
                        小
                            避免频繁触发老年代串行收集器
            +XX:+UseCMSCompactAtFullCollection
                设定进行多少次CMS回收后,进行一次内存压缩
                    非并发
            +XX:CMSClassUnloadingEnabled
                如果条件允许,系统会用CMS的机制回收Perm区Class数据
        G1
            -XX:UseG!GC
                打开G1收集器开关
            -XX:MaxGCPauseMillis
                指定目标最大停顿时间
                    G1调整新生代和老年代的比例、调整堆大小、调整晋升年龄等手段,试图达到预设目标
                        缩短 
                            增加新生代GC的次数 
                            老年代区域,在混合GC收集时,一次收集的区域数量会变少 
                                增加进行FullGC的可能性
                核心
            -XX:ParallelGCThreads
                设置并行回收时,GC的工作线程数量
                核心
            -XX:InitiatingHeapOccupancyPercent
                指定当整个堆使用率达到多少时,触发并发标记周期的执行
                    默认值 45
                        为满足MaxGCPauseMillis
                            偏大
                                会导致并发周期迟迟得不到启动
                                    Full GC可能性增加
                            偏小
                                并发周期非常频繁
                                    大量GC线程抢占CPU
                                        应用程序的性能有所下降
    跟踪垃圾回收
        -XX:+printGC
            打印GC的简要信息
        -XX:+PrintGCDetails
            打印GC的详细信息,包括当前堆的各个区间的使用情况,下界,当前上界和上界
        -XX:+PrintHeapAtGC
            打印全面的堆信息
        -XX:+PrintGCTimeStamps
            GC发生的时间
        -XX:+PrintGCApplicationConcurrentTime
            应用程序的执行时间
        -XX:+PrintGCApplicationStoppedTime
            由于GC而产生的停顿时间
        +XX:PrintReferenceGC
            系统内的软引用、弱引用、虚引用和Finalize队列
        -Xloggc:log/gc.log
            将GC日志以文件的形式输出

类加载/卸载的跟踪
    -XX:+TraceClassLoading
        跟踪类的加载
    -XX:TraceClassUnloading
        跟踪类的卸载
    -XX:+PrintClassHistogram
        系统中类的分布情况

系统参数
    -XX:+PrintCommandLineFlags
        传递给虚拟机的显式和隐式参数
    -XX:+PrintVMOptions
        打印虚拟机接受到的命令行显式参数
    -XX:+PrintFlagsFinal
        打印所有的系统参数的值

方法区
    JDK6
        -XX:PermSize
            永久区大小,默认64MB
        -XX:MaxPermSize
            最大永久区大小
    JDK8
        -XX:MaxMetaspaceSize
            最大元数据区大小

直接内存
    -XX:MaxDirectMemorySizee    
        最大可用直接内存

发布了32 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/okxuewei/article/details/89055302