文章目录
1 三种参数类型
- 标准参数
-help, -version。 - X参数
-Xint,-Xcomp。 - XX参数(使用率较高)
-XX:newSize, -XX:+UseSerialGC
2 标准参数
特点:一般很稳定,在未来的jvm版本不会变化,用java -help查询所有的标准参数。
[root@localhost ~]# clear
[root@localhost ~]# java -help
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 : 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
2.1 实战
- 查询jvm版本 java -verson
[root@localhost ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
注意:-showversion,表示先打印版本信息,再执行后续命令。
- 通过-D设置系统参数
public class Demo {
public static void main(String[] args) {
String str = System.getProperty("str");
if (str == null) {
System.out.println("str is null");
} else {
System.out.println("str=" + str);
}
}
}
具体操作过程请看:jvm通过-D设置系统属性参数的操作步骤。
2.2 -server与-client参数
- 服务器模式server vm特点:初始堆空间大点,默认用并行垃圾回收器,启动慢运行快;
- 客服端模式client vm特点:初始堆空间小点,默认用串行垃圾回收器,启动快运行慢;
- 64位操作系统只支持server模式,32位看情况。
3 -X参数
非标准参数,不同的版本可能不同,可通过java -X查看
[root@localhost ~]# java -X
-Xmixed 混合模式执行 (默认)
-Xint 仅解释模式执行
-Xbootclasspath:<用 : 分隔的目录和 zip/jar 文件>
设置搜索路径以引导类和资源
-Xbootclasspath/a:<用 : 分隔的目录和 zip/jar 文件>
附加在引导类路径末尾
-Xbootclasspath/p:<用 : 分隔的目录和 zip/jar 文件>
置于引导类路径之前
-Xdiag 显示附加诊断消息
-Xnoclassgc 禁用类垃圾收集
-Xincgc 启用增量垃圾收集
..........
3.1 -Xint、-Xcomp、-Xmixed
- 解释模式(interpreted mode) -Xint
- 编译模式(compiled mode),-Xcomp
- 混合模式(mixed mode),-Xmixed
4 -XX参数
用途:jvm调优和debug操作。
使用方式:
- boolean类型
格式:-XX:[±]
例子:-XX:+DisableExplicitGC,表示禁用手动调用GC操作,即System.gc()无效。 - 非boolean类型
格式:-XX:
例子:-XX:NewRatio=1,表示新生代和老年代的比值。
java -showversion -XX:+DisableExplicitGC Demo
5 -Xms和-Xmx
-Xms表示设置堆内存初始空间;
-Xmx表示设置堆内存最大空间。
例子:java -Xms512m -Xmx2048 Demo,初始空间为512m,最大空间为2048m。
6 查看jvm运行参数
- 运行java命令打印运行参数
- 查询正在运行的java进程参数
6.1 运行java命令打印运行参数
[root@localhost ~]# java -XX:+PrintFlagsFinal -version
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product}
uintx AdaptiveSizePolicyOutputInterval = 0 {product}
uintx AdaptiveSizePolicyWeight = 10 {product}
uintx AdaptiveSizeThroughPutPolicy = 0 {product}
uintx AdaptiveTimeWeight = 25 {product}
bool AdjustConcurrency = false {product}
bool AggressiveHeap = false {product}
bool AggressiveOpts = false {product}
intx AliasLevel = 3 {C2 product}
bool AlignVector = true {C2 product}
intx AllocateInstancePrefetchLines = 1 {product}
intx AllocatePrefetchDistance = 256 {product}
intx AllocatePrefetchInstr = 3 {product}
intx AllocatePrefetchLines = 3 {product}
intx AllocatePrefetchStepSize = 64 {product}
intx AllocatePrefetchStyle = 1 {product}
bool AllowJNIEnvProxy = false {product}
bool AllowNonVirtualCalls = false {product}
bool AllowParallelDefineClass = false {product}
bool AllowUserSignalHandlers = false {product}
bool AlwaysActAsServerClassMachine = false {product}
bool AlwaysCompileLoopMethods = false {product}
bool AlwaysLockClassLoader = false {product}
bool AlwaysPreTouch = false {product}
bool AlwaysRestoreFPU = false {product}
bool AlwaysTenure = false {product}
bool AssertOnSuspendWaitFailure = false {product}
bool AssumeMP = false {product}
intx AutoBoxCacheMax = 128 {C2 product}
uintx AutoGCSelectPauseMillis = 5000 {product}
intx BCEATraceLevel = 0 {product}
intx BackEdgeThreshold = 100000 {pd product}
bool BackgroundCompilation = true {pd product}
uintx BaseFootPrintEstimate = 268435456 {product}
intx BiasedLockingBulkRebiasThreshold = 20 {product}
intx BiasedLockingBulkRevokeThreshold = 40 {product}
intx BiasedLockingDecayTime = 25000 {product}
intx BiasedLockingStartupDelay = 4000 {product}
bool BindGCTaskThreadsToCPUs = false {product}
bool BlockLayoutByFrequency = true {C2 product}
intx BlockLayoutMinDiamondPercentage = 20 {C2 product}
bool BlockLayoutRotateLoops = true {C2 product}
bool BranchOnRegister = false {C2 product}
bool BytecodeVerificationLocal = false {product}
bool BytecodeVerificationRemote = true {product}
bool C1OptimizeVirtualCallProfiling = true {C1 product}
bool C1ProfileBranches = true {C1 product}
bool C1ProfileCalls = true {C1 product}
bool C1ProfileCheckcasts = true {C1 product}
bool C1ProfileInlinedCalls = true {C1 product}
bool C1ProfileVirtualCalls = true {C1 product}
bool C1UpdateMethodData = true {C1 product}
intx CICompilerCount := 2 {product}
bool CICompilerCountPerCPU = true {product}
bool CITime = false {product}
参数有boolean和数字两种类型,值的操作符=和:=,分别代表默认值和修改值。
[root@localhost ~]# java -XX:+PrintFlagsFinal -XX:+AdjustConcurrency -version
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
uintx AdaptiveSizePausePolicy = 0 {product}
uintx AdaptiveSizePolicyCollectionCostMargin = 50 {product}
uintx AdaptiveSizePolicyInitializingSteps = 20 {product}
uintx AdaptiveSizePolicyOutputInterval = 0 {product}
uintx AdaptiveSizePolicyWeight = 10 {product}
uintx AdaptiveSizeThroughPutPolicy = 0 {product}
uintx AdaptiveTimeWeight = 25 {product}
bool AdjustConcurrency := true {product}
bool AggressiveHeap = false {product}
6.2 查询正在运行的java进程参数
#用法:jinfo -flags <进程id>
#通过jps 或 jps -l 查询进程id
[root@localhost bin]# jps
17689 Jps
10831 Bootstrap
[root@localhost bin]# jps -l
17699 sun.tools.jps.Jps
10831 org.apache.catalina.startup.Bootstrap
[root@localhost bin]# jinfo -flags 17699
Attaching to process ID 17699, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: cannot open binary file
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: cannot open binary file
at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:163)