1. JVM的运行参数

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)

  • 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、付费专栏及课程。

余额充值