java虚拟机介绍:java程序启动参数设置优化
一、
我们要尽量减少 Full gc 的次数(tenured generation 一般比较大,收集的时间较长,频繁的Full gc会导致应用的性能收到严重的影响)。
堆内存GC: JVM(采用分代回收的策略),用较高的频率对年轻的对象(young generation)进行YGC,而对老对象(tenured generation)较少(tenured generation 满了后才进行)进行Full GC。这样就不需要每次GC都将内存中所有对象都检查一遍。
GC类型 | 触发条件 | 触发过程 | 注意 | 查看方式 |
---|---|---|---|---|
YGC | eden | 全 | jstat –gc | |
FGC | old空间不足perm空间不足显示调用System.GC,RMI等的定时触发YGC时的悲观策略dump live的内存信息时(jmap –dump:live) | 全 | jstat –gc |
参数名称 | 含义 | 默认值 | 备注 |
---|---|---|---|
-Xms | 初始堆大小 | 物理内存的 | 默 |
-Xmx | 最大堆大小 | 物理内存的 | |
-Xmn | 年 | ||
-XX:NewSize | 设置年轻代大小 | ||
-XX:MaxNewSize | 年 | ||
-XX:PermSize | 设置持久代 | 物理内存的 | |
-XX:MaxPermSize | 设置持久代最大值 | 物理内存的 | |
-Xss | 每个 | JDK5.0 | |
- | Thread Stack Size | (0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.] | |
-XX:NewRatio | 年 | ||
-XX:SurvivorRatio | Eden | 设置为 | |
-XX:LargePageSizeInBytes | 内存 | =128m | |
-XX:+UseFastAccessorMethods | 原始 | ||
-XX:+DisableExplicitGC | 关 | 这个参数需要严格的测试 | |
-XX:MaxTenuringThreshold | 垃圾最大年 | ||
-XX:+AggressiveOpts | 加快 | ||
-XX:+UseBiasedLocking | 锁机制的性能改 | ||
-Xnoclassgc | 禁用垃圾回收 | ||
-XX:SoftRefLRUPolicyMSPerM | 每兆堆空 | 1s | softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap |
-XX:PretenureSizeThreshold | 0 | ||
-XX:TLABWasteTargetPercent | TLAB | 1% | |
-XX:+ | FullGC | false | |
-XX:+UseParallelGC | 选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.(此项待验证) | ||
-XX:+UseParNewGC | 设置年轻代为并行收 | ||
-XX:ParallelGCThreads | 并行收集器的 | 此 | |
-XX:+UseParallelOldGC | 年老代垃圾收集方式 | 这个是 | |
-XX:MaxGCPauseMillis | 每次年 | 如果无法 | |
-XX:+UseAdaptiveSizePolicy | 自 | 设置此选项后 | |
-XX:GCTimeRatio | 设置垃圾回收时间占程序运行时间的百分 | 公式 | |
-XX:+ | Full GC | true | Do young generation GC prior to a full GC. (Introduced in 1.4.1.) |
-XX:+UseConcMarkSweepGC | 使用 | 测试中配置这个以后 | |
-XX:CMSFullGCsBeforeCompaction | 多少次后 | 由于并 | |
-XX:+CMSParallelRemarkEnabled | 降低 | ||
-XX+UseCMSCompactAtFullCollection | 在 | ||
-XX:+UseCMSInitiatingOccupancyOnly | 使用手 | 禁止 | |
-XX:CMSInitiatingOccupancyFraction=70 | 92 | 为了保证不出现 | |
-XX:CMSInitiatingPermOccupancyFraction | 设置 | 92 | |
-XX:+CMSIncrementalMode | 设置为增量模 | 用于 | |
-XX:+CMSClassUnloadingEnabled | |||
-XX:+PrintGC | [GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs] | ||
-XX:+PrintGCDetails | |||
-XX:+PrintGCTimeStamps | |||
-XX:+PrintGC:PrintGCTimeStamps | 输 | ||
-XX:+PrintGCApplicationStoppedTime | 打印垃圾回收期 | 输出形式 | |
-XX:+PrintGCApplicationConcurrentTime | 打印每次垃圾回收前 | 输出形式 | |
-XX:+PrintHeapAtGC | 打印 | ||
-Xloggc:filename | |||
-XX:+PrintClassHistogram | garbage collects before printing the histogram. | ||
-XX:+PrintTLAB | 查看 | ||
- XX:+PrintTenuringDistribution | 查看每次 |
1.
将Xms和Xmx设为一样的值。如果虚拟机启动时设置使用的内存比较小,这个时候又需要初始化很多对象,虚拟机就必须重复地增加内存。
另外一个对于app流畅性运行影响的因素是young generation的大小。young generation越大,minor collection越少;但是在固定heap size情况下,更大的young generation就意味着小的tenured generation,就意味着更多的major collection(major collection会引发minor collection)。
NewRatio反映的是young和tenured generation的大小比例。NewSize和MaxNewSize反映的是young generation大小的下限和上限,将这两个值设为一样就固定了young generation的大小(同Xms和Xmx设为一样)。
如果希望,SurvivorRatio也可以优化survivor的大小,不过这对于性能的影响不是很大。SurvivorRatio是eden和survior大小比例。
一般而言,server端的app会有以下规则:
10、