JVM 常用的命令行参数
参考:
官网坐标点击可见
对于参数的分类
- 标准: - 开头,所有的HotSpot都支持
- 非标准:-X 开头,特定版本HotSpot支持特定命令
- 不稳定:-XX 开头,下个版本可能取消
查看JVM参数的办法
java -XX:+PrintFlagsFinal -version
会显示很多很多的记录
格式为:
Type | Name | Operator | Value | Application
查找关键字可以加group 或者 findstr 命令
如:
java -XX:+PrintFlagsFinal -version |findstr New
java -XX:+PrintFlagsFinal -version |group New
findstr 是Windows 下的dos 命令
group 是linux 下的命令
常见的GC组合
-XX:+UseSerialGC
Serial New (DefNew) + Serial Old
适用于小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
-XX:+UseParNewGC
ParNew + SerialOld
这个组合已经很少用(在某些版本中已经废弃)
-XX:+UseConc(urrent)MarkSweepGC
ParNew + CMS + Serial Old
有的虚拟机环境需要带红色部分内容有的不需要
-XX:+UseParallelGC
Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
JDK 1.8版本默认适用的就这个
-XX:+UseParallelOldGC
Parallel Scavenge + Parallel Old
和-XX:+UseParallelGC 效果是一样的
-XX:+UseG1GC
G1 回收器
查看默认使用回收器的命令
运行命令:
java -XX:+PrintCommandLineFlags -version
后根据日志来分析
这个是我电脑执行完成后返回的内容
-XX:InitialHeapSize=267049216 起始堆大小,初始化时堆的大小
-XX:MaxHeapSize=4272787456 最大堆大小
-XX:+PrintCommandLineFlags 这个就是运行的命令
-XX:+UseCompressedClassPointers 启用类对象指针压缩
-XX:+UseCompressedOops 启用普通类中对象的指针压缩
-XX:-UseLargePagesIndividualAllocation 启用大文件单独分配
-XX:+UseParallelGC 使用 parallel GC 垃圾回收器
常用的命令设置
-
java -XX:+PrintCommandLineFlags -version
这个刚才说了用于显示命令行的参数 -
java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC -version
-Xmn10M 年轻代大小 当只设置这一个参数时,初始大小和最大大小是一样的
-Xms40M 最小堆大小 或者 初始堆大小
-Xmx60M 最大堆大小 对于堆的设置,一般最小和最大建议设置一样大小。因为最小值和最大值的不断变动会调用cpu的不断计算,从而影响性能,所以我们可以直接就把最小值和最大值设置为一样的。
-XX:+PrintGC 打印GC信息,
-version 这里用version 这个命令来代替了,应该是执行的类名称,
除了PrintGC 参数外还可以使用以下参数来替换PrintGC
- PrintGCDetails 打印GC的详细信息
- PrintGCTimeStamps 打印GC详细时间
- PrintGCCauses 打印GC的触发原因
- java -XX:+UseConcMarkSweepGC -X:+PrintCommandLineFlags -version
这个命令就是使用CMS的垃圾回收器
- java -XX:+PrintFlagsInitial 默认参数值
- java -XX:+PrintFlagsFinal 最终参数值