JVM各种参数设置

JVM关于堆的设置

-XX:+PrintFlagsInitial // 查看所有参数默认初始值
-XX:+PrintFlagsFinal // 查看所有参数最终值
-Xms: // 初始堆空间(默认物理内存 1/64)
-Xmx: // 最大堆空间(默认物理内存 1/4)
-Xmn: // 设置新生代大小
-XX:NewRatio: // 设置新生代与老年代占比(默认2 表示新生代1:老年代2)
-XX:SurvivorRatio // 设置新生代和 form , to 区的比例 模式是 8 表示 eden=8, s0=1,s2=1
-XX:MaxTenuringThreshold // 设置新生代最大年龄默认15

-XX:UseTLAB // 开启TLAB空间分配
-XX:TLABWasteTargetPercent // 设置TLAB空间占Eden大小, 默认1%

-XX:MetaspaceSize // 设置方法区 元空间的开始值 默认21m
-XX:MaxMetaspaceSize // 设置最大值

-XX:StringTableSize // 设置Stringtable

逃逸分析

-XX:+DoEscapeAnalysis // 开启逃逸分析(默认开启)

-XX:-UseBiasedLocking // 禁用偏向锁(默认开启)

执行引擎

-XX:CompileThreshold // 设置代码热点执行n次后进行JIT编译 默认10000
-XX:-UseCounterDecay// 设置关闭半衰周期, 默认是开启的我们需要手动关闭这样就能保证程序运行的时间越久我们所有的代码都能够被JIT所编译
-XX:CounterHalfLifeTime// 设置半衰周期时间 秒

-Xint // 设置执行引擎采用纯解释器模式
-Xcomp // 完全采用编译模式执行
-Xmixed // 采用解释器+ 编译器执行

垃圾收集器

1. Serial 垃圾收集器配置

-XX:+UseSerialGC // 开启单线程的垃圾收集器, 默认老年代会开启 SerialOld 收集器

-XX:+UseParNewGC // parNew 是 Serial新生代的多线程版本, 开始 parNew 收集器 会默认老年代开启 SerialOld

2. ParallalGC 配置

-XX:+UseParallelGC //新生代收集器 jdk8默认收集器 默认会开启 parallelOld

-XX:+UseParallelOldGC
-XX:ParallelGCThreads // 设置年轻代GC线程数量一般与线程数相等
-XX:MaxGCPauseMillis // 设置垃圾收集器最大停留时间 STW的时间
-XX:GCTimeRatio // 设置垃圾占总时间的占比模式是99 也就是 垃圾收集器占用1% 的时间回收垃圾
-XX:+UseAdaptiveSizePolicy // 设置parallel收集器年轻代晋升老年代的对象年龄, 默认开始 不建议设置在设置了吞吐量后最好自动设置

3. CMS收集器

  • 概述:
    初始标记: 此阶段需要 stop the world 停止用户线程, 这个阶段只标记了GCRoots 能够直接关联到的对象, 由于直接关联的对象比较少所有速度快 用户线程暂停的时间短;
    并发标记: 从RCRoots 直接关联的对象开始遍历整个对象图, 耗时长 但不需要停止用户线程,可以与垃圾收集线程一起并发执行;
    重新标记: stop the world 由于并发标记 垃圾收集线程和用户线程同时执行, 因此修正用户线程程序运行而导致产生变化的那一部分对象标记记录, 这个阶段停止时间比初始阶段长, 但比并发标记时间短;
    并发清理: 清理删除标记死亡的对象, 释放空间, 由于不需要移动对象 及整理, 所以可以和用户线程同时执行. 由于采用了并发清理 所以产生了内存碎片化的问题, 所以在内存分配的角度, 无法使用指针碰撞, 而是使用了空闲列表的方式分配内存

由于CMS和用户线程并发执行所有它不可能等到整个堆满了执行在执行, 而是有一个阈值 达到内存使用率后就会执行CMS, 要是CMS运行中没有可分配的内存了 会启用 Serial Old 收集器对整个堆进行收集;
在这里插入图片描述
-XX:+UseConcMarkSweepGC // 开启CMS收集器默认年轻代会开启parNew 收集器, 和老年代的 SerialOld 收集器
-XX:CMSInitiatingOccupancyFraction // 设置收集器的阈值 jdk5 是 68%进行CMS回收 jdk6及以上 是92%开启回收
-XX:+UseCMSCompactAtFullCollection // 设置CMS内存收集手进行内存整理,因整理内存无法并发执行开启后会导致GC时间变长;
-XX:CMSFullGCsBeforeCompaction // 设置执行多少次CMS后执行一次FullGC对内存进行整理

4. G1 垃圾收集器
-XX:+UseG1GC // 开启G1垃圾收集器
-XX:G1HeapRegionSIze// 设置 region的大小 要求设置为 2的次方, 范围 1-32m 之间,
-XX:MaxGCPauseMills // 设置期望GC最大停留时间 不保证能实现默认是200ms

垃圾收集日志参数

-XX:+PrintGC // 设置打印GC概要日志
-XX:+PrintGCDetails // 设置打印GC详细日志
-XX:+PrintGCDateStamps // 打印时间信息 和 gcDetails 一起使用
-XX:+PrintHeapAtGC // 在GC之前打印出堆信息
-Xloggc:/usr/local/cc.log // 设置gc输出目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM运行参数的设置需要根据具体的应用场和需求来进行调整,以下是一些常见的JVM运行参数设置建议值: 1. 初始堆大小(-Xms)和最大堆大小(-Xmx):可以根据应用的内存需求来设置。一般建议将初始堆大小和最大堆大小设置为相同的值,以避免堆大小动态调整带来的性能开销。例如,可以设置为 -Xms2g -Xmx2g 表示初始堆大小和最大堆大小都为2GB。 2. 年轻代大小(-Xmn):年轻代是对象分配的主要区域,可以根据应用的对象创建和回收频率来设置。一般建议将年轻代大小设置为整个堆大小的1/3到1/4左右。例如,可以设置为 -Xmn1g 表示年轻代大小为1GB。 3. 年代大小(-XX:MaxTenuringThreshold):年代是存放长时间存活的对象的区域,可以根据应用的对象生命周期来设置。一般建议将年代大小设置为整个堆大小的2/3到3/4左右。例如,可以设置为 -XX:MaxTenuringThreshold=15 表示对象经过15次垃圾回收后仍然存活,则会被移到年代。 4. 垃圾回收器选择(-XX:+UseParallelGC):根据应用的性能需求和硬件环境来选择合适的垃圾回收器。如果对吞吐量要求较高,可以选择并行垃圾回收器(-XX:+UseParallelGC);如果对延迟要求较高,可以选择CMS垃圾回收器(-XX:+UseConcMarkSweepGC)或者G1垃圾回收器(-XX:+UseG1GC)。 5. 元空间大小(-XX:MaxMetaspaceSize):元空间用于存放类的元数据信息,可以根据应用的类加载和卸载频率来设置。一般建议将元空间大小设置为应用所需的最大类数量的两倍左右。例如,可以设置为 -XX:MaxMetaspaceSize=256m 表示元空间大小为256MB。 请注意,以上只是一些常见的JVM运行参数设置建议值,具体的设置还需要根据实际情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值