-D参数

java -Dk=v Demo01Application

设置JVM系统参数,在代码里可以用System.getProperty("k")获取

public class Demo01Application {
    public static void main(String[] args) {
        String v = System.getProperty("k");
        System.out.println(v);
    }
}

-classpath或-cp

JVM默认使用环境变量CLASS_PATH设置的路径加载类库,如果设置了-cp,则覆盖CLASS_PATH的设置

-server

JVM可以指定使用server或client模式启动

# 以server模式启动
java -server xxx

# 以client模式启动
java -client xxx

server模式启动时,启动过程比client慢,但是启动后性能比client好

-client

已client模式启动

-XX:-OmitStackTraceInFastThrow

jdk5开始,-server模式下,默认开启省略异常栈快速输出,当同样的异常抛出次数达到一定数量时,输出的异常信息就会省略栈的信息

使用 -XX:-OmitStackTraceInFastThrow 可以关闭这个配置

JVM也只对部分异常做了Fast Throw

NullPointerException
ArithmeticException
ArrayIndexOutOfBoundsException
ArrayStoreException
ClassCastException

-XX:+HeapDumpOnOutOfMemoryError

当出现栈溢出时,自动将栈信息dump出来,配合 -XX:HeapDumpPath ,自定义指定dump出来的文件存放位置

-XX:HeapDumpPath

设置栈信息dump出来后的存储位置

-XX:-UseLargePages

参考:https://www.bbsmax.com/A/o75N2GpW5W/

设置JVM使用大内存页,适合需要使用大内存栈的应用

需要操作系统也配置huge page,查看当前系统配置的 huge page

grep Huge /proc/meminfo
-----------------------------------
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

Hugepagesize 表示系统一个大内存页是 2M

-verbose:gc

在控制台输出GC信息

-XX:+PrintGCDetails

输出详细的GC信息

-XX:+PrintGCDateStamps

输出GC的日期时间戳

-XX:+PrintGCTimeStamps

输出GC的时间的时间戳

-XX:+UseGCLogFileRotation

启用GC日志切割

-XX:NumberOfGCLogFiles

设置GC日志切割的文件最大保留个数

# 可以保留10个日志文件
-XX:NumberOfGCLogFiles=10

-XX:GCLogFileSize

设置每个GC日志文件最大大小

# 设置文件大小50M
-XX:GCLogFileSize=50M

-XX:+HeapDumpOnOutOfMemoryError

OOM时自动dump内存快照

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

自动dump的快照保存位置

-XX:HeapDumpPath=/usr/local/app/oom.hprof

-XX:+UseParallelGC

使用 Parallel Scavenge + Serial Old 作为垃圾回收

java 9之前版本,在 -server 模式下,默认开启这个参数

-XX:+UseParallelOldGC

使用 Parallel Scavenge + Parallel Old 作为垃圾回收

java1.8,默认使用这个垃圾回收组合

-XX:+UseG1GC

指定使用G1垃圾回收器,配合-XX:MaxGCPauseMillis指定GC导致的STW最大停顿时间

-XX:MaxGCPauseMillis

设置GC最大STW停顿时间

-Xloggc

设置GC日志输出位置

-Xloggc:/data/logs/app_gc.log

-Xlog:gc*

jdk9以上设置GC日志输出配置

jdk版本小于9时的配置

java -Xloggc:/data/logs/app_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=50M -jar test.jar

版本大于等于9时可以这么配置

# filesize=51200,表示50m
java -Xlog:gc*:file=/data/logs/app_gc.log:time,tags:filecount=10:filesize=51200