快捷搜索: 王者荣耀 脱发

JVM参数中的 -、-X、-XX、-D、-Javaagent:

一.JVM 启动参数规则:-、-X、-XX、-D

参考:https://blog..net/liujianyangbj/article/details/115215680

通过JVM运行一个java程序的时候,我们通常会用java -jar xxxx.jar 的命令,我们通常都会根据情况配置很多的运行参数。这些参数可以分为四类:

1.以 - 开头的是标准参数,所有JVM都支持,并且向后兼容

-verbose:gc 
-server

2.以 -X开头的为非标准参数,绝大多数都是控制JVM的参数

-Xmx2G  
-Xms2G 
-Xloggc:/data/kinyang/log/gc.%t.log

3.以-XX:开头的为非稳定参数,专门用于控制JVM行为

-XX:+UseParNewGC  
-XX:CompileThreshold=10  	
-XX:HeapDumpPath=/data/kinyang/dump/heap/

-XX:+ 启用option,例如:-XX:+PrintGCDetails启动打印GC信息的选项,其中+号表示true,开启的意思 -XX:- 不启用option,例如:-XX:-PrintGCDetails关闭启动打印GC信息的选项,其中-号表示false,关闭的意思 -XX:= 设定option的值为数字类型,可跟单位,例如 32k, 1024m, 2g。例如:-XX:MaxPermSize=64m -XX:= 设定option的值为字符串,例如: -XX:HeapDumpPath="/data/kinyang/dump/heap/"

4.以-D开头的是系统参数赋值(可以是系统默认有的参数,也可以是自己定义的参数),在程序中可以通过System.getProperty(key)获取和通过System.setProperty(key, value)进行设置

-Dfile.encoding=UTF-8 
-Dlog.path=/data/kinyang/test/log/

二. -Javaagent:

Javaagent是java命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求:

1.这个 jar 包的 MANIFEST.MF 文件必须指定 Premain-Class 项。 2. Premain-Class 指定的那个类必须实现premain() 方法。

premain 方法,从字面上理解,就是运行在 main 函数之前的的类。当Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行-javaagent所指定 jar 包内 Premain-Class 这个类的 premain 方法 。 使用方法: 定义一个 MANIFEST.MF 文件,必须包含 Premain-Class 选项,通常也会加入Can-Redefine-Classes 和 Can-Retransform-Classes 选项。

创建一个Premain-Class 指定的类,类中包含 premain 方法,方法逻辑由用户自己确定。 将 premain 的类和 MANIFEST.MF 文件打成 jar 包。

使用参数 -javaagent: jar包路径 启动要代理的方法。

三.服务启动参数示例

-javaagent:/home/lk/test_perf_2/default/approot/lib/tracer-agent.jar 
-Dstatic_deploy_home=/home/test/test_perf_2/default/approot 
-DinstanceName=default 
-Dserver.port=10019 
-DdeployAppClusterName=test_perf_2 
-Dspring.profiles.active=lk-pref-test

四.文章推荐

下面是个人觉得讲得挺不错的一些博客文章 1. 2. 3.

经验分享 程序员 微信小程序 职场和发展