javac 命令 javac 命令大全详解---推荐看

2023-11-18

javac 命令 javac 命令大全详解_温柔一刀的技术博客_51CTO博客

1. javac 命令
用法:javac <options> <source files> <@files>

source files: 一个或多个要编译的源文件(.java文件)

@files:一个或多个 包含待编译.java文件列表 的文件。

注:当要编译的.java文件较少,直接在javac命令后接上源文件列表即可,例如:javac SourceFile1.java SourceFile2.java 当要编译的Java文件较多时可以使用*.java通配,也可以将源文件名列在一个文件中(任意后缀均可,例如:sourcefiles.anything),然后在 javac 命令行中使用该列表文件名,文件名前冠以 @ 字符,即:javac @sourcefiles.anything

options:编译选项/参数

 -g                                  生成所有调试信息
-g:none                          不生成任何调试信息
-g:{lines,vars,source}     只生成某些调试信息
-nowarn                          不生成任何警告
-verbose                         输出有关编译器正在执行的操作的消息
-deprecation                   输出使用已过时的 API 的源位置
-classpath <路径>          指定查找用户类文件和注释处理程序的位置
-cp <路径>                     指定查找用户类文件和注释处理程序的位置
-sourcepath <路径>       指定查找输入源文件的位置
-bootclasspath <路径>   覆盖引导类文件的位置
-extdirs <目录>              覆盖所安装扩展的位置
-endorseddirs <目录>    覆盖签名的标准路径的位置
-proc:{none,only}           控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径>        指定查找注释处理程序的位置
-parameters                         生成元数据以用于方法参数的反射
-d <目录>                    指定放置生成的类文件的位置
-s <目录>                    指定放置生成的源文件的位置
-h <目录>                    指定放置生成的本机标头文件的位置
-implicit:{none,class}     指定是否为隐式引用文件生成类文件
-encoding <编码>             指定源文件使用的字符编码
-source <发行版>              提供与指定发行版的源兼容性
-target <发行版>              生成特定 VM 版本的类文件
-profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
-version                   版本信息
-help                      输出标准选项的提要
-A关键字[=值]                  传递给注释处理程序的选项
-X                                输出非标准选项的提要
-J<标记>                     直接将 <标记> 传递给运行时系统
-Werror                    出现警告时终止编译
@<文件名>             从文件读取选项和文件名
这里我们挑几个常用的option详细介绍一下:

1.1 -d
指定放置生成的类文件的位置,eg:javac -d <destdir> Xxx.java。缺省情况下class文件和源文件存放同一级目录,不会自动建包结构的文件夹存放生成的class文件。当指定了<destdir>时,如果编译的类带有包名的话会自动把包建好。<destdir>必须存在,不会自动创建不存在的指定路径,否则报错如下:javac: 找不到目录: <destdir>

1.2 -classpath/-cp
设置用户类路径,它将覆盖CLASSPATH 环境变量中的用户类路径。若缺省则默认当前路径。

1.3 -sourcepath
指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (:) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。

注意:在javac命令中-classpath和-sourcepath都是用于指定编译当前类文件 需要的调用其他路径上的类或源文件 的位置。

可以这么理解:

-classpath用来指定搜索类文件(*.class文件)的路径,-sourcepath用来指定搜索源文件(*.java文件)的路径
如果未指定-sourcepath,将会在classpath指定的路径中查找类文件(*.class文件)和源文件(*.java文件)。如果指定了sourcepath则不会在classpath路径下查找源文件。
如果找到了源文件(*.java文件),可能会重新生成类文件(*.class文件)
下面我们来测试一下:

在D盘根目录下新建一个Test类和Hello类:

// D
// |——Test.java
// |——Hello.java

package fu.zhi.zhe;
public class Test{
    public static void main(String[] args){
        Hello hello = new Hello();
        hello.sayHello();
    }
}

package fu.zhi.zhe;
public class Hello{
    public void sayHello(){
        System.out.println("Hello");
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
1.3.1 首先我们不使用-classpath和-sourcepath参数
C:\> javac -d d:\classes -verbose D:\Test.java
1.
首先我们会发现这是编译不通过的,报错信息提示找不到类Hello。为什么会出现这一情况呢,原因在于此时Hello类和Test类都在D盘根目录下,当我们使用C:\> javac -d d:\classes -verbose D:\Test.java 命令编译Test类时由于我们既没有指定-classpath参数也没有指定-sourcepath参数,而-classpath缺省时表示当前路径即C:\,显然这个路径下是找不到Hello.java的。参见编译器输出的详细信息:

[源文件的搜索路径: .]
[类文件的搜索路径:

C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\sunrsasign.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar,C:\Program Files\Java\jdk1.8.0_221\jre\classes,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar,C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar,.]
1.
那么如果我们切换到D盘目录下或者指定sourcepath或classpath为D:\,编译能成功吗?其实无论是切换到D盘还是设置classpath或sourcapath,javac编译器依然找不到Hello类?其实是这样的,因为在我们Test类中引入了Hello类,编译器寻找带包的类是会带上包名作为目录结构去找的,也就是他回去找D:\fu\zhi\zhe\下有没有Hello类,此时当然找不到了。如果我们把放在D:\目录下的Hello类移动到D:\fu\zhi\zhe包下,就可以编译成功了。

注意:我们在编译Test类时并没有加上包名来编译这个源文件,加上源文件的全路径名就行了即D:\Hello.java,这一点要和java命令区分开来。java命令在执行时是需要带上包名的,并且包之间用.分割。D:\>java fu.zhi.zhe.Hello。

测试过程中我发现一个有意思的问题,一开始我忘记给Hello类加上包名,此时无论如何都是编译不通过的。查了以后才知道jdk1.4以后就不允许带包的类引用不带包的类了。但如果真的一定要用也不是没有办法的,只要把待引入的类提前编译好,添加到java命令的-classpath路径下,就可以反射调用这个类了。哈哈哈,反射技术绝对是Java中出的叛徒。 

首先我们修改一下Hello.java如下:

public class Hello{ public void sayHello(){ System.out.println("Hello"); } }

这是一个不带包结构的类,怎么在Test类中引入呢?首先编译Hello类:javac -d D:\classes Hello.java,生成字节码文件放在D:\classes文件夹下。然后修改Test类如下:

package fu.zhi.zhe;

import java.lang.reflect Method;
public class Test{
    public void sayHello(){
        try{
            Class<?> helloCls = class.forName("Hello");
            Object hello = helloCls.newInstance();
            Method sayHelloMtd = helloCls.getMethod("sayHello");
            sayHelloMtd.invoke(hello);
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
此时我们再编译Test.java如下:javac -d D:\ Test.java,生成Test.class文件在D:\fu\zhi\zhe文件夹下。两个类都编译完成可以执行了,此时在DOS窗口输入D:\> java -verbose -classpath D:\classes;. fu.zhi.zhe.Test就可以执行成功打印Hello啦,并且可以看到Hello类被加载。事实上,这个类其实是被ApplicationClassLoader类加载器加载的,其实我们也可以使用BootStrap ClassLoader和Extension ClassLoader加载Hello类,这个将在后文介绍。

1.3.2 同时指定-classpath和-sourcepath执行
C:\Users\hp>javac -verbose -classpath D:\apps -sourcepath D:\ D:\Test.java
[解析开始时间 RegularFileObject[D:\Test.java]]
[解析已完成, 用时 16 毫秒]
[源文件的搜索路径: D:\]
[类文件的搜索路径: 
C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\sunrsasign.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\classes,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar,
D:\apps
]
...
[正在加载RegularFileObject[D:\fu\zhi\zhe\Hello.java]]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
可以看到明确指定了源文件搜索路径为指定的-sourcepath 即 D:\,而类文件搜索路径除了启动类加载器和扩展类加载器的路径外还加上了指定的-classpath 即 D:\apps。

1.3.3 只指定classpath-执行
C:\Users\hp>javac -verbose -classpath D:\ D:\Test.java
[解析开始时间 RegularFileObject[D:\Test.java]]
[解析已完成, 用时 16 毫秒]
[源文件的搜索路径: D:\]
[类文件的搜索路径: 
C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\sunrsasign.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\classes,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar,
D:\]
...
[正在加载RegularFileObject[D:\fu\zhi\zhe\Hello.java]]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
此时源文件和类文件的搜索路径就是一样的了,都是按照-classpath指定的路径D:\去查找。

1.3.4 只指定-resourcepath执行
C:>javac -verbose -sourcepath D:\ D:\Test.java
[源文件的搜索路径: D:\]
[类文件的搜索路径: 
C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\sunrsasign.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\classes,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar,
C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar,
.]
...
[正在加载RegularFileObject[D:\fu\zhi\zhe\Hello.java]]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
此时类文件的搜索路径因为缺省即当前目录,源文件路径即我们指定的路径。

2.java 命令详解
用法:

java [-options] class [args...]   (执行类)
                   or
java [-options] -jar jarfile [args...]   (执行jar文件)
1.
2.
3.
java命令支持的options分为standoptions和nonstandoptions,事实上javac也支持nonstandoptions但是用的较少上文并未列出。java命令的nonstandoptions多余jvm调优相关。

2.1 java [-options] class [args...]   (执行类)
2.1.1. stand options 
   

-d32          使用 32 位数据模型 (如果可用)
     -d64          使用 64 位数据模型 (如果可用)
     -server       选择 "server" VM,默认 VM 是 server.
     -cp <目录和 zip/jar 文件的类搜索路径>
     -classpath <目录和 zip/jar 文件的类搜索路径>   用 ; 分隔的目录, JAR 档案和 ZIP 档案列表, 用于搜索类文件。
     -D<名称>=<值>   设置系统属性
     -verbose:[class|gc|jni] 启用详细输出
     -version                      输出产品版本并退出
     -showversion  输出产品版本并继续
     -? -help      输出此帮助消息
     -X               输出非标准选项的帮助
     -ea[:<packagename>...|:<classname>]
     -enableassertions[:<packagename>...|:<classname>]
                   按指定的粒度启用断言
     -da[:<packagename>...|:<classname>]
     -disableassertions[:<packagename>...|:<classname>]
                   禁用具有指定粒度的断言
     -esa | -enablesystemassertions
                   启用系统断言
     -dsa | -disablesystemassertions
                   禁用系统断言
     -agentlib:<libname>[=<选项>]
                   加载本机代理库 <libname>, 例如 -agentlib:hprof
                   另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
     -agentpath:<pathname>[=<选项>]
                   按完整路径名加载本机代理库
     -javaagent:<jarpath>[=<选项>]
                   加载 Java 编程语言代理, 请参阅 java.lang.instrument
     -splash:<imagepath>
                   使用指定的图像显示启动屏幕
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
2.1.1.1 -cp/-classpath 设置类加载路径
我们知道,Java中有三个不同的类加载器 Bootstrap ClassLoader(启动类加载器,由C++实现,在Java中获取其值以null表示),负责加载<JAVA_HOME>\jre\lib目录下jar包中的类;Extension ClassLoader(扩展类加载器,Java代码实现sun.misc.Launcher$ExtClassLoader),负责加载<JAVA_HOME>\jre\lib\ext目录下的类;和Application ClassLoader(应用程序类加载器,也叫系统类加载器。Java代码实现sun.misc.Launcher$AppClassLoader),负责加载classpath下的类,我们设置classpath更改的就是AppClassLoader类加载器的加载路径。

bootstrap classloader类加载路径,System.getProperty("sun.boot.class.path"):
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\sunrsasign.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar;
 C:\Program Files\Java\jdk1.8.0_221\jre\classes     // 这个目录默认不存在的,我们可以手动创建,这样就可以实现启动类加载器家在我们自己的类了extension classloader类加载路径,System.getProperty("java.ext.dirs"):
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar
 C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
2.1.1.2 -D<名称>=<值>
设置系统变量,eg: -Djava.ext.dirs=D:\

什么是系统属性呢,具体到代码上来说就是System类中定义的一系列键值对,System类中几个常用的系统属性相关方法:System::setProperty(), System::getProperty() ,System::getProperties() 。使用System.getProperties().list(System.out)打印一下我的系统属性列表:

java.runtime.name=Java(TM) SE Runtime Environment
 sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_221\jre\bin
 java.vm.version=25.221-b11
 java.vm.vendor=Oracle Corporation
 java.vendor.url=http://java.oracle.com/
 path.separator=;
 java.vm.name=Java HotSpot(TM) 64-Bit Server VM
 file.encoding.pkg=sun.io
 user.script=
 user.country=CN
 sun.java.launcher=SUN_STANDARD
 sun.os.patch.level=
 java.vm.specification.name=Java Virtual Machine Specification
 user.dir=D:\IdeaProject\concurrency
 java.runtime.version=1.8.0_221-b11
 java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
 java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_221\jr...
 os.arch=amd64
 java.io.tmpdir=C:\Users\hp\AppData\Local\Temp\
 line.separator=java.vm.specification.vendor=Oracle Corporation
 user.variant=
 os.name=Windows 10
 sun.jnu.encoding=GBK
 java.library.path=C:\Program Files\Java\jdk1.8.0_221\bi...
 java.specification.name=Java Platform API Specification
 java.class.version=52.0
 sun.management.compiler=HotSpot 64-Bit Tiered Compilers
 os.version=10.0
 user.home=C:\Users\hp
 user.timezone=
 java.awt.printerjob=sun.awt.windows.WPrinterJob
 file.encoding=UTF-8
 java.specification.version=1.8
 user.name=hp
 java.class.path=.
 java.vm.specification.version=1.8
 sun.arch.data.model=64
 java.home=C:\Program Files\Java\jdk1.8.0_221\jre
 sun.java.command=com.fuzz.jmm.ClassLoaderTest2
 java.specification.vendor=Oracle Corporation
 user.language=zh
 awt.toolkit=sun.awt.windows.WToolkit
 java.vm.info=mixed mode
 java.version=1.8.0_221
 java.ext.dirs=C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
 sun.boot.class.path=
 "C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_221\jre\classes"
 java.vendor=Oracle Corporation
 file.separator=\
 java.vendor.url.bug=http://bugreport.sun.com/bugreport/
 sun.cpu.endian=little
 sun.io.unicode.encoding=UnicodeLittle
 sun.desktop=windows
 sun.cpu.isalist=amd64
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
除了以上这些标准的系统属性外我们还可以添加一些自定义的系统属性。以上这些都是标准的系统属性,其中有三个和类加载路径相关的我们可以拿出来详细讨论一下。

2.1.1.2.1 sun.boot.class.path
看他的值我们就知道,指定的是启动类的类加载路径。我们尝试改一下:

-Dsun.boot.class.path=D:\。执行报错如下:"Error occurred during initialization of VM java/lang/ClassFormatError: Missing BootstrapMethods attribute in class file java/lang/CharSequence"。
1.
2.1.1.2.2 java.ext.dirs
设置扩展类加载器的类加载路径,-Djava.ext.dirs=<目录>,会覆盖原来的值一般不用。
 

2.1.1.2.3 java.class.path
设置classpath。-Djava.class.path等效于-classpath

2.1.2 nonstand options
2.1.2.1 第一类非标准选项:-X开头
   

-Xmixed           混合模式执行 (默认)
     -Xint             仅解释模式执行
     -Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
                       设置搜索路径以引导类和资源
     -Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
                       附加在引导类路径末尾
     -Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
                       置于引导类路径之前
     -Xdiag            显示附加诊断消息
     -Xnoclassgc       禁用类垃圾收集
     -Xincgc           启用增量垃圾收集
     -Xloggc:<file>    将 GC 状态记录在文件中 (带时间戳)
     -Xbatch           禁用后台编译
     -Xms<size>        设置初始 Java 堆大小
     -Xmx<size>        设置最大 Java 堆大小
     -Xss<size>        设置 Java 线程堆栈大小
     -Xprof            输出 cpu 配置文件数据
     -Xfuture          启用最严格的检查, 预期将来的默认值
     -Xrs              减少 Java/VM 对操作系统信号的使用 (请参阅文档)
     -Xcheck:jni       对 JNI 函数执行其他检查
     -Xshare:off       不尝试使用共享类数据
     -Xshare:auto      在可能的情况下使用共享类数据 (默认)
     -Xshare:on        要求使用共享类数据, 否则将失败。
     -XshowSettings    显示所有设置并继续
     -XshowSettings:all
                       显示所有设置并继续
     -XshowSettings:vm 显示所有与 vm 相关的设置并继续
     -XshowSettings:properties
                       显示所有属性设置并继续
     -XshowSettings:locale
                       显示所有与区域设置相关的设置并继续
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
2.1.2.1.1 -Xbootclasspath: 
-Xbootclasspath: 完全取代基本核心的Java class 搜索路径.不常用,否则要重新写所有Java 核心class。作用类似于-Dsun.boot.class.path
1.
2.1.2.1.2 -Xbootclasspath/p: 
-Xbootclasspath/p: 前缀。将classpath添加在核心class搜索路径前面.不常用,避免引起不必要的冲突.
1.
2.1.2.1.3 -Xbootclasspath/a: 
-Xbootclasspath/a: 后缀。将classpath添加在核心class搜索-路径后面。常用!!
1.
注:这几个命令后面的冒号不可省略,而且冒号后不要加空格。

2.1.2.2 第二类非标准选项,-XX:开头
我们可以使用下面两个参数来获取所有的XX参数和值:

-XX:+PrintFlagsFinal or -XX:+PrintFlagsInitial
1.
注意:

-XX:+PrintFlagsFinal 打印JVM参数的初始值
-XX:+PrintFlagsFinal 打印JVM启动后的最终值 :"="表示值没有别修改过,":="表示运行时被修改过的
如何查看某个在运行的Java程序它的某个JVM参数是否开启:
 1. jinfo -flag 配置项 进程PID       eg: jinfo -flag UseParallelGC 1234
1.
2.
3.
4.
我们也可以把输出的值导入到一个txt文件中:java -XX:+PrintFlagsFinal>>XXoptions.txt

本机测试结果发现XX参数共计728个。

[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                               = false                               {C2 product}
     intx AllocateInstancePrefetchLines             = 1                                   {product}
     intx AllocatePrefetchDistance                  = 192                                 {product}
     intx AllocatePrefetchInstr                     = 3                                   {product}
     intx AllocatePrefetchLines                     = 4                                   {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                          := 4                                   {product}
     bool CICompilerCountPerCPU                     = true                                {product}
     bool CITime                                    = false                               {product}
     bool CMSAbortSemantics                         = false                               {product}
    uintx CMSAbortablePrecleanMinWorkPerIteration   = 100                                 {product}
     intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}
    uintx CMSBitMapYieldQuantum                     = 10485760                            {product}
    uintx CMSBootstrapOccupancy                     = 50                                  {product}
     bool CMSClassUnloadingEnabled                  = true                                {product}
    uintx CMSClassUnloadingMaxInterval              = 0                                   {product}
     bool CMSCleanOnEnter                           = true                                {product}
     bool CMSCompactWhenClearAllSoftRefs            = true                                {product}
    uintx CMSConcMarkMultiple                       = 32                                  {product}
     bool CMSConcurrentMTEnabled                    = true                                {product}
    uintx CMSCoordinatorYieldSleepCount             = 10                                  {product}
     bool CMSDumpAtPromotionFailure                 = false                               {product}
     bool CMSEdenChunksRecordAlways                 = true                                {product}
    uintx CMSExpAvgFactor                           = 50                                  {product}
     bool CMSExtrapolateSweep                       = false                               {product}
    uintx CMSFullGCsBeforeCompaction                = 0                                   {product}
    uintx CMSIncrementalDutyCycle                   = 10                                  {product}
    uintx CMSIncrementalDutyCycleMin                = 0                                   {product}
     bool CMSIncrementalMode                        = false                               {product}
    uintx CMSIncrementalOffset                      = 0                                   {product}
     bool CMSIncrementalPacing                      = true                                {product}
    uintx CMSIncrementalSafetyFactor                = 10                                  {product}
    uintx CMSIndexedFreeListReplenish               = 4                                   {product}
     intx CMSInitiatingOccupancyFraction            = -1                                  {product}
    uintx CMSIsTooFullPercentage                    = 98                                  {product}
   double CMSLargeCoalSurplusPercent                = 0.950000                            {product}
   double CMSLargeSplitSurplusPercent               = 1.000000                            {product}
     bool CMSLoopWarn                               = false                               {product}
    uintx CMSMaxAbortablePrecleanLoops              = 0                                   {product}
     intx CMSMaxAbortablePrecleanTime               = 5000                                {product}
    uintx CMSOldPLABMax                             = 1024                                {product}
    uintx CMSOldPLABMin                             = 16                                  {product}
    uintx CMSOldPLABNumRefills                      = 4                                   {product}
    uintx CMSOldPLABReactivityFactor                = 2                                   {product}
     bool CMSOldPLABResizeQuicker                   = false                               {product}
    uintx CMSOldPLABToleranceFactor                 = 4                                   {product}
     bool CMSPLABRecordAlways                       = true                                {product}
    uintx CMSParPromoteBlocksToClaim                = 16                                  {product}
     bool CMSParallelInitialMarkEnabled             = true                                {product}
     bool CMSParallelRemarkEnabled                  = true                                {product}
     bool CMSParallelSurvivorRemarkEnabled          = true                                {product}
    uintx CMSPrecleanDenominator                    = 3                                   {product}
    uintx CMSPrecleanIter                           = 3                                   {product}
    uintx CMSPrecleanNumerator                      = 2                                   {product}
     bool CMSPrecleanRefLists1                      = true                                {product}
     bool CMSPrecleanRefLists2                      = false                               {product}
     bool CMSPrecleanSurvivors1                     = false                               {product}
     bool CMSPrecleanSurvivors2                     = true                                {product}
    uintx CMSPrecleanThreshold                      = 1000                                {product}
     bool CMSPrecleaningEnabled                     = true                                {product}
     bool CMSPrintChunksInDump                      = false                               {product}
     bool CMSPrintEdenSurvivorChunks                = false                               {product}
     bool CMSPrintObjectsInDump                     = false                               {product}
    uintx CMSRemarkVerifyVariant                    = 1                                   {product}
     bool CMSReplenishIntermediate                  = true                                {product}
    uintx CMSRescanMultiple                         = 32                                  {product}
    uintx CMSSamplingGrain                          = 16384                               {product}
     bool CMSScavengeBeforeRemark                   = false                               {product}
    uintx CMSScheduleRemarkEdenPenetration          = 50                                  {product}
    uintx CMSScheduleRemarkEdenSizeThreshold        = 2097152                             {product}
    uintx CMSScheduleRemarkSamplingRatio            = 5                                   {product}
   double CMSSmallCoalSurplusPercent                = 1.050000                            {product}
   double CMSSmallSplitSurplusPercent               = 1.100000                            {product}
     bool CMSSplitIndexedFreeListBlocks             = true                                {product}
     intx CMSTriggerInterval                        = -1                                  {manageable}
    uintx CMSTriggerRatio                           = 80                                  {product}
     intx CMSWaitDuration                           = 2000                                {manageable}
    uintx CMSWorkQueueDrainThreshold                = 10                                  {product}
     bool CMSYield                                  = true                                {product}
    uintx CMSYieldSleepCount                        = 0                                   {product}
    uintx CMSYoungGenPerWorker                      = 67108864                            {pd product}
    uintx CMS_FLSPadding                            = 1                                   {product}
    uintx CMS_FLSWeight                             = 75                                  {product}
    uintx CMS_SweepPadding                          = 1                                   {product}
    uintx CMS_SweepTimerThresholdMillis             = 10                                  {product}
    uintx CMS_SweepWeight                           = 75                                  {product}
     bool CheckEndorsedAndExtDirs                   = false                               {product}
     bool CheckJNICalls                             = false                               {product}
     bool ClassUnloading                            = true                                {product}
     bool ClassUnloadingWithConcurrentMark          = true                                {product}
     intx ClearFPUAtPark                            = 0                                   {product}
     bool ClipInlining                              = true                                {product}
    uintx CodeCacheExpansionSize                    = 65536                               {pd product}
    uintx CodeCacheMinimumFreeSpace                 = 512000                              {product}
     bool CollectGen0First                          = false                               {product}
     bool CompactFields                             = true                                {product}
     intx CompilationPolicyChoice                   = 3                                   {product}
ccstrlist CompileCommand                            =                                     {product}
    ccstr CompileCommandFile                        =                                     {product}
ccstrlist CompileOnly                               =                                     {product}
     intx CompileThreshold                          = 10000                               {pd product}
     bool CompilerThreadHintNoPreempt               = true                                {product}
     intx CompilerThreadPriority                    = -1                                  {product}
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx CompressedClassSpaceSize                  = 1073741824                          {product}
    uintx ConcGCThreads                             = 0                                   {product}
     intx ConditionalMoveLimit                      = 3                                   {C2 pd product}
     intx ContendedPaddingWidth                     = 128                                 {product}
     bool ConvertSleepToYield                       = true                                {pd product}
     bool ConvertYieldToSleep                       = false                               {product}
     bool CrashOnOutOfMemoryError                   = false                               {product}
     bool CreateMinidumpOnCrash                     = false                               {product}
     bool CriticalJNINatives                        = true                                {product}
     bool DTraceAllocProbes                         = false                               {product}
     bool DTraceMethodProbes                        = false                               {product}
     bool DTraceMonitorProbes                       = false                               {product}
     bool Debugging                                 = false                               {product}
    uintx DefaultMaxRAMFraction                     = 4                                   {product}
     intx DefaultThreadPriority                     = -1                                  {product}
     intx DeferPollingPageLoopCount                 = -1                                  {product}
     intx DeferThrSuspendLoopCount                  = 4000                                {product}
     bool DeoptimizeRandom                          = false                               {product}
     bool DisableAttachMechanism                    = false                               {product}
     bool DisableExplicitGC                         = false                               {product}
     bool DisplayVMOutputToStderr                   = false                               {product}
     bool DisplayVMOutputToStdout                   = false                               {product}
     bool DoEscapeAnalysis                          = true                                {C2 product}
     bool DontCompileHugeMethods                    = true                                {product}
     bool DontYieldALot                             = false                               {pd product}
    ccstr DumpLoadedClassList                       =                                     {product}
     bool DumpReplayDataOnError                     = true                                {product}
     bool DumpSharedSpaces                          = false                               {product}
     bool EagerXrunInit                             = false                               {product}
     intx EliminateAllocationArraySizeLimit         = 64                                  {C2 product}
     bool EliminateAllocations                      = true                                {C2 product}
     bool EliminateAutoBox                          = true                                {C2 product}
     bool EliminateLocks                            = true                                {C2 product}
     bool EliminateNestedLocks                      = true                                {C2 product}
     intx EmitSync                                  = 0                                   {product}
     bool EnableContended                           = true                                {product}
     bool EnableResourceManagementTLABCache         = true                                {product}
     bool EnableSharedLookupCache                   = true                                {product}
     bool EnableTracing                             = false                               {product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    ccstr ErrorFile                                 =                                     {product}
    ccstr ErrorReportServer                         =                                     {product}
   double EscapeAnalysisTimeout                     = 20.000000                           {C2 product}
     bool EstimateArgEscape                         = true                                {product}
     bool ExitOnOutOfMemoryError                    = false                               {product}
     bool ExplicitGCInvokesConcurrent               = false                               {product}
     bool ExplicitGCInvokesConcurrentAndUnloadsClasses  = false                               {product}
     bool ExtendedDTraceProbes                      = false                               {product}
    ccstr ExtraSharedClassListFile                  =                                     {product}
     bool FLSAlwaysCoalesceLarge                    = false                               {product}
    uintx FLSCoalescePolicy                         = 2                                   {product}
   double FLSLargestBlockCoalesceProximity          = 0.990000                            {product}
     bool FailOverToOldVerifier                     = true                                {product}
     bool FastTLABRefill                            = true                                {product}
     intx FenceInstruction                          = 0                                   {ARCH product}
     intx FieldsAllocationStyle                     = 1                                   {product}
     bool FilterSpuriousWakeups                     = true                                {product}
    ccstr FlightRecorderOptions                     =                                     {product}
     bool ForceNUMA                                 = false                               {product}
     bool ForceTimeHighResolution                   = false                               {product}
     intx FreqInlineSize                            = 325                                 {pd product}
   double G1ConcMarkStepDurationMillis              = 10.000000                           {product}
    uintx G1ConcRSHotCardLimit                      = 4                                   {product}
    uintx G1ConcRSLogCacheSize                      = 10                                  {product}
     intx G1ConcRefinementGreenZone                 = 0                                   {product}
     intx G1ConcRefinementRedZone                   = 0                                   {product}
     intx G1ConcRefinementServiceIntervalMillis     = 300                                 {product}
    uintx G1ConcRefinementThreads                   = 0                                   {product}
     intx G1ConcRefinementThresholdStep             = 0                                   {product}
     intx G1ConcRefinementYellowZone                = 0                                   {product}
    uintx G1ConfidencePercent                       = 50                                  {product}
    uintx G1HeapRegionSize                          = 0                                   {product}
    uintx G1HeapWastePercent                        = 5                                   {product}
    uintx G1MixedGCCountTarget                      = 8                                   {product}
     intx G1RSetRegionEntries                       = 0                                   {product}
    uintx G1RSetScanBlockSize                       = 64                                  {product}
     intx G1RSetSparseRegionEntries                 = 0                                   {product}
     intx G1RSetUpdatingPauseTimePercent            = 10                                  {product}
     intx G1RefProcDrainInterval                    = 10                                  {product}
    uintx G1ReservePercent                          = 10                                  {product}
    uintx G1SATBBufferEnqueueingThresholdPercent    = 60                                  {product}
     intx G1SATBBufferSize                          = 1024                                {product}
     intx G1UpdateBufferSize                        = 256                                 {product}
     bool G1UseAdaptiveConcRefinement               = true                                {product}
    uintx GCDrainStackTargetSize                    = 64                                  {product}
    uintx GCHeapFreeLimit                           = 2                                   {product}
    uintx GCLockerEdenExpansionPercent              = 5                                   {product}
     bool GCLockerInvokesConcurrent                 = false                               {product}
    uintx GCLogFileSize                             = 8192                                {product}
    uintx GCPauseIntervalMillis                     = 0                                   {product}
    uintx GCTaskTimeStampEntries                    = 200                                 {product}
    uintx GCTimeLimit                               = 98                                  {product}
    uintx GCTimeRatio                               = 99                                  {product}
    uintx HeapBaseMinAddress                        = 2147483648                          {pd product}
     bool HeapDumpAfterFullGC                       = false                               {manageable}
     bool HeapDumpBeforeFullGC                      = false                               {manageable}
     bool HeapDumpOnOutOfMemoryError                = false                               {manageable}
    ccstr HeapDumpPath                              =                                     {manageable}
    uintx HeapFirstMaximumCompactionCount           = 3                                   {product}
    uintx HeapMaximumCompactionInterval             = 20                                  {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
     bool IgnoreEmptyClassPaths                     = false                               {product}
     bool IgnoreUnrecognizedVMOptions               = false                               {product}
    uintx IncreaseFirstTierCompileThresholdAt       = 50                                  {product}
     bool IncrementalInline                         = true                                {C2 product}
    uintx InitialBootClassLoaderMetaspaceSize       = 4194304                             {product}
    uintx InitialCodeCacheSize                      = 2555904                             {pd product}
    uintx InitialHeapSize                          := 134217728                           {product}
    uintx InitialRAMFraction                        = 64                                  {product}
   double InitialRAMPercentage                      = 1.562500                            {product}
    uintx InitialSurvivorRatio                      = 8                                   {product}
    uintx InitialTenuringThreshold                  = 7                                   {product}
    uintx InitiatingHeapOccupancyPercent            = 45                                  {product}
     bool Inline                                    = true                                {product}
    ccstr InlineDataFile                            =                                     {product}
     intx InlineSmallCode                           = 2000                                {pd product}
     bool InlineSynchronizedMethods                 = true                                {C1 product}
     bool InsertMemBarAfterArraycopy                = true                                {C2 product}
     intx InteriorEntryAlignment                    = 16                                  {C2 pd product}
     intx InterpreterProfilePercentage              = 33                                  {product}
     bool JNIDetachReleasesMonitors                 = true                                {product}
     bool JavaMonitorsInStackTrace                  = true                                {product}
     intx JavaPriority10_To_OSPriority              = -1                                  {product}
     intx JavaPriority1_To_OSPriority               = -1                                  {product}
     intx JavaPriority2_To_OSPriority               = -1                                  {product}
     intx JavaPriority3_To_OSPriority               = -1                                  {product}
     intx JavaPriority4_To_OSPriority               = -1                                  {product}
     intx JavaPriority5_To_OSPriority               = -1                                  {product}
     intx JavaPriority6_To_OSPriority               = -1                                  {product}
     intx JavaPriority7_To_OSPriority               = -1                                  {product}
     intx JavaPriority8_To_OSPriority               = -1                                  {product}
     intx JavaPriority9_To_OSPriority               = -1                                  {product}
     bool LIRFillDelaySlots                         = false                               {C1 pd product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx LargePageSizeInBytes                      = 0                                   {product}
     bool LazyBootClassLoader                       = true                                {product}
     intx LiveNodeCountInliningCutoff               = 40000                               {C2 product}
     bool LogCommercialFeatures                     = false                               {product}
     intx LoopMaxUnroll                             = 16                                  {C2 product}
     intx LoopOptsCount                             = 43                                  {C2 product}
     intx LoopUnrollLimit                           = 60                                  {C2 pd product}
     intx LoopUnrollMin                             = 4                                   {C2 product}
     bool LoopUnswitching                           = true                                {C2 product}
     bool ManagementServer                          = false                               {product}
    uintx MarkStackSize                             = 4194304                             {product}
    uintx MarkStackSizeMax                          = 536870912                           {product}
    uintx MarkSweepAlwaysCompactCount               = 4                                   {product}
    uintx MarkSweepDeadRatio                        = 1                                   {product}
     intx MaxBCEAEstimateLevel                      = 5                                   {product}
     intx MaxBCEAEstimateSize                       = 150                                 {product}
    uintx MaxDirectMemorySize                       = 0                                   {product}
     bool MaxFDLimit                                = true                                {product}
    uintx MaxGCMinorPauseMillis                     = 4294967295                          {product}
    uintx MaxGCPauseMillis                          = 4294967295                          {product}
    uintx MaxHeapFreeRatio                          = 100                                 {manageable}
    uintx MaxHeapSize                              := 2120220672                          {product}
     intx MaxInlineLevel                            = 9                                   {product}
     intx MaxInlineSize                             = 35                                  {product}
     intx MaxJNILocalCapacity                       = 65536                               {product}
     intx MaxJavaStackTraceDepth                    = 1024                                {product}
     intx MaxJumpTableSize                          = 65000                               {C2 product}
     intx MaxJumpTableSparseness                    = 5                                   {C2 product}
     intx MaxLabelRootDepth                         = 1100                                {C2 product}
     intx MaxLoopPad                                = 11                                  {C2 product}
    uintx MaxMetaspaceExpansion                     = 5451776                             {product}
    uintx MaxMetaspaceFreeRatio                     = 70                                  {product}
    uintx MaxMetaspaceSize                          = 4294901760                          {product}
    uintx MaxNewSize                               := 706740224                           {product}
     intx MaxNodeLimit                              = 75000                               {C2 product}
 uint64_t MaxRAM                                    = 0                                   {pd product}
    uintx MaxRAMFraction                            = 4                                   {product}
   double MaxRAMPercentage                          = 25.000000                           {product}
     intx MaxRecursiveInlineLevel                   = 1                                   {product}
    uintx MaxTenuringThreshold                      = 15                                  {product}
     intx MaxTrivialSize                            = 6                                   {product}
     intx MaxVectorSize                             = 32                                  {C2 product}
    uintx MetaspaceSize                             = 21807104                            {pd product}
     bool MethodFlushing                            = true                                {product}
    uintx MinHeapDeltaBytes                        := 524288                              {product}
    uintx MinHeapFreeRatio                          = 0                                   {manageable}
     intx MinInliningThreshold                      = 250                                 {product}
     intx MinJumpTableSize                          = 10                                  {C2 pd product}
    uintx MinMetaspaceExpansion                     = 339968                              {product}
    uintx MinMetaspaceFreeRatio                     = 40                                  {product}
    uintx MinRAMFraction                            = 2                                   {product}
   double MinRAMPercentage                          = 50.000000                           {product}
    uintx MinSurvivorRatio                          = 3                                   {product}
    uintx MinTLABSize                               = 2048                                {product}
     intx MonitorBound                              = 0                                   {product}
     bool MonitorInUseLists                         = false                               {product}
     intx MultiArrayExpandLimit                     = 6                                   {C2 product}
     bool MustCallLoadClassInternal                 = false                               {product}
    uintx NUMAChunkResizeWeight                     = 20                                  {product}
    uintx NUMAInterleaveGranularity                 = 2097152                             {product}
    uintx NUMAPageScanRate                          = 256                                 {product}
    uintx NUMASpaceResizeRate                       = 1073741824                          {product}
     bool NUMAStats                                 = false                               {product}
    ccstr NativeMemoryTracking                      = off                                 {product}
     bool NeedsDeoptSuspend                         = false                               {pd product}
     bool NeverActAsServerClassMachine              = false                               {pd product}
     bool NeverTenure                               = false                               {product}
    uintx NewRatio                                  = 2                                   {product}
    uintx NewSize                                  := 44564480                            {product}
    uintx NewSizeThreadIncrease                     = 5320                                {pd product}
     intx NmethodSweepActivity                      = 10                                  {product}
     intx NmethodSweepCheckInterval                 = 5                                   {product}
     intx NmethodSweepFraction                      = 16                                  {product}
     intx NodeLimitFudgeFactor                      = 2000                                {C2 product}
    uintx NumberOfGCLogFiles                        = 0                                   {product}
     intx NumberOfLoopInstrToAlign                  = 4                                   {C2 product}
     intx ObjectAlignmentInBytes                    = 8                                   {lp64_product}
    uintx OldPLABSize                               = 1024                                {product}
    uintx OldPLABWeight                             = 50                                  {product}
    uintx OldSize                                  := 89653248                            {product}
     bool OmitStackTraceInFastThrow                 = true                                {product}
ccstrlist OnError                                   =                                     {product}
ccstrlist OnOutOfMemoryError                        =                                     {product}
     intx OnStackReplacePercentage                  = 140                                 {pd product}
     bool OptimizeFill                              = true                                {C2 product}
     bool OptimizePtrCompare                        = true                                {C2 product}
     bool OptimizeStringConcat                      = true                                {C2 product}
     bool OptoBundling                              = false                               {C2 pd product}
     intx OptoLoopAlignment                         = 16                                  {pd product}
     bool OptoScheduling                            = false                               {C2 pd product}
    uintx PLABWeight                                = 75                                  {product}
     bool PSChunkLargeArrays                        = true                                {product}
     intx ParGCArrayScanChunk                       = 50                                  {product}
    uintx ParGCDesiredObjsFromOverflowList          = 20                                  {product}
     bool ParGCTrimOverflow                         = true                                {product}
     bool ParGCUseLocalOverflow                     = false                               {product}
    uintx ParallelGCBufferWastePct                  = 10                                  {product}
    uintx ParallelGCThreads                         = 8                                   {product}
     bool ParallelGCVerbose                         = false                               {product}
    uintx ParallelOldDeadWoodLimiterMean            = 50                                  {product}
    uintx ParallelOldDeadWoodLimiterStdDev          = 80                                  {product}
     bool ParallelRefProcBalancingEnabled           = true                                {product}
     bool ParallelRefProcEnabled                    = false                               {product}
     bool PartialPeelAtUnsignedTests                = true                                {C2 product}
     bool PartialPeelLoop                           = true                                {C2 product}
     intx PartialPeelNewPhiDelta                    = 0                                   {C2 product}
    uintx PausePadding                              = 1                                   {product}
     intx PerBytecodeRecompilationCutoff            = 200                                 {product}
     intx PerBytecodeTrapLimit                      = 4                                   {product}
     intx PerMethodRecompilationCutoff              = 400                                 {product}
     intx PerMethodTrapLimit                        = 100                                 {product}
     bool PerfAllowAtExitRegistration               = false                               {product}
     bool PerfBypassFileSystemCheck                 = false                               {product}
     intx PerfDataMemorySize                        = 32768                               {product}
     intx PerfDataSamplingInterval                  = 50                                  {product}
    ccstr PerfDataSaveFile                          =                                     {product}
     bool PerfDataSaveToFile                        = false                               {product}
     bool PerfDisableSharedMem                      = false                               {product}
     intx PerfMaxStringConstLength                  = 1024                                {product}
     intx PreInflateSpin                            = 10                                  {pd product}
     bool PreferInterpreterNativeStubs              = false                               {pd product}
     intx PrefetchCopyIntervalInBytes               = 576                                 {product}
     intx PrefetchFieldsAhead                       = 1                                   {product}
     intx PrefetchScanIntervalInBytes               = 576                                 {product}
     bool PreserveAllAnnotations                    = false                               {product}
     bool PreserveFramePointer                      = false                               {pd product}
    uintx PretenureSizeThreshold                    = 0                                   {product}
     bool PrintAdaptiveSizePolicy                   = false                               {product}
     bool PrintCMSInitiationStatistics              = false                               {product}
     intx PrintCMSStatistics                        = 0                                   {product}
     bool PrintClassHistogram                       = false                               {manageable}
     bool PrintClassHistogramAfterFullGC            = false                               {manageable}
     bool PrintClassHistogramBeforeFullGC           = false                               {manageable}
     bool PrintCodeCache                            = false                               {product}
     bool PrintCodeCacheOnCompilation               = false                               {product}
     bool PrintCommandLineFlags                     = false                               {product}
     bool PrintCompilation                          = false                               {product}
     bool PrintConcurrentLocks                      = false                               {manageable}
     intx PrintFLSCensus                            = 0                                   {product}
     intx PrintFLSStatistics                        = 0                                   {product}
     bool PrintFlagsFinal                          := true                                {product}
     bool PrintFlagsInitial                         = false                               {product}
     bool PrintGC                                   = false                               {manageable}
     bool PrintGCApplicationConcurrentTime          = false                               {product}
     bool PrintGCApplicationStoppedTime             = false                               {product}
     bool PrintGCCause                              = true                                {product}
     bool PrintGCDateStamps                         = false                               {manageable}
     bool PrintGCDetails                            = false                               {manageable}
     bool PrintGCID                                 = false                               {manageable}
     bool PrintGCTaskTimeStamps                     = false                               {product}
     bool PrintGCTimeStamps                         = false                               {manageable}
     bool PrintHeapAtGC                             = false                               {product rw}
     bool PrintHeapAtGCExtended                     = false                               {product rw}
     bool PrintHeapAtSIGBREAK                       = true                                {product}
     bool PrintJNIGCStalls                          = false                               {product}
     bool PrintJNIResolving                         = false                               {product}
     bool PrintOldPLAB                              = false                               {product}
     bool PrintOopAddress                           = false                               {product}
     bool PrintPLAB                                 = false                               {product}
     bool PrintParallelOldGCPhaseTimes              = false                               {product}
     bool PrintPromotionFailure                     = false                               {product}
     bool PrintReferenceGC                          = false                               {product}
     bool PrintSafepointStatistics                  = false                               {product}
     intx PrintSafepointStatisticsCount             = 300                                 {product}
     intx PrintSafepointStatisticsTimeout           = -1                                  {product}
     bool PrintSharedArchiveAndExit                 = false                               {product}
     bool PrintSharedDictionary                     = false                               {product}
     bool PrintSharedSpaces                         = false                               {product}
     bool PrintStringDeduplicationStatistics        = false                               {product}
     bool PrintStringTableStatistics                = false                               {product}
     bool PrintTLAB                                 = false                               {product}
     bool PrintTenuringDistribution                 = false                               {product}
     bool PrintTieredEvents                         = false                               {product}
     bool PrintVMOptions                            = false                               {product}
     bool PrintVMQWaitTime                          = false                               {product}
     bool PrintWarnings                             = true                                {product}
    uintx ProcessDistributionStride                 = 4                                   {product}
     bool ProfileInterpreter                        = true                                {pd product}
     bool ProfileIntervals                          = false                               {product}
     intx ProfileIntervalsTicks                     = 100                                 {product}
     intx ProfileMaturityPercentage                 = 20                                  {product}
     bool ProfileVM                                 = false                               {product}
     bool ProfilerPrintByteCodeStatistics           = false                               {product}
     bool ProfilerRecordPC                          = false                               {product}
    uintx PromotedPadding                           = 3                                   {product}
    uintx QueuedAllocationWarningCount              = 0                                   {product}
    uintx RTMRetryCount                             = 5                                   {ARCH product}
     bool RangeCheckElimination                     = true                                {product}
     intx ReadPrefetchInstr                         = 0                                   {ARCH product}
     bool ReassociateInvariants                     = true                                {C2 product}
     bool ReduceBulkZeroing                         = true                                {C2 product}
     bool ReduceFieldZeroing                        = true                                {C2 product}
     bool ReduceInitialCardMarks                    = true                                {C2 product}
     bool ReduceSignalUsage                         = false                               {product}
     intx RefDiscoveryPolicy                        = 0                                   {product}
     bool ReflectionWrapResolutionErrors            = true                                {product}
     bool RegisterFinalizersAtInit                  = true                                {product}
     bool RelaxAccessControlCheck                   = false                               {product}
    ccstr ReplayDataFile                            =                                     {product}
     bool RequireSharedSpaces                       = false                               {product}
    uintx ReservedCodeCacheSize                     = 251658240                           {pd product}
     bool ResizeOldPLAB                             = true                                {product}
     bool ResizePLAB                                = true                                {product}
     bool ResizeTLAB                                = true                                {pd product}
     bool RestoreMXCSROnJNICalls                    = false                               {product}
     bool RestrictContended                         = true                                {product}
     bool RewriteBytecodes                          = true                                {pd product}
     bool RewriteFrequentPairs                      = true                                {pd product}
     intx SafepointPollOffset                       = 256                                 {C1 pd product}
     intx SafepointSpinBeforeYield                  = 2000                                {product}
     bool SafepointTimeout                          = false                               {product}
     intx SafepointTimeoutDelay                     = 10000                               {product}
     bool ScavengeBeforeFullGC                      = true                                {product}
     intx SelfDestructTimer                         = 0                                   {product}
    uintx SharedBaseAddress                         = 0                                   {product}
    ccstr SharedClassListFile                       =                                     {product}
    uintx SharedMiscCodeSize                        = 122880                              {product}
    uintx SharedMiscDataSize                        = 4194304                             {product}
    uintx SharedReadOnlySize                        = 16777216                            {product}
    uintx SharedReadWriteSize                       = 16777216                            {product}
     bool ShowMessageBoxOnError                     = false                               {product}
     intx SoftRefLRUPolicyMSPerMB                   = 1000                                {product}
     bool SpecialEncodeISOArray                     = true                                {C2 product}
     bool SplitIfBlocks                             = true                                {C2 product}
     intx StackRedPages                             = 1                                   {pd product}
     intx StackShadowPages                          = 6                                   {pd product}
     bool StackTraceInThrowable                     = true                                {product}
     intx StackYellowPages                          = 3                                   {pd product}
     bool StartAttachListener                       = false                               {product}
     intx StarvationMonitorInterval                 = 200                                 {product}
     bool StressLdcRewrite                          = false                               {product}
    uintx StringDeduplicationAgeThreshold           = 3                                   {product}
    uintx StringTableSize                           = 60013                               {product}
     bool SuppressFatalErrorMessage                 = false                               {product}
    uintx SurvivorPadding                           = 3                                   {product}
    uintx SurvivorRatio                             = 8                                   {product}
     intx SuspendRetryCount                         = 50                                  {product}
     intx SuspendRetryDelay                         = 5                                   {product}
     intx SyncFlags                                 = 0                                   {product}
    ccstr SyncKnobs                                 =                                     {product}
     intx SyncVerbose                               = 0                                   {product}
    uintx TLABAllocationWeight                      = 35                                  {product}
    uintx TLABRefillWasteFraction                   = 64                                  {product}
    uintx TLABSize                                  = 0                                   {product}
     bool TLABStats                                 = true                                {product}
    uintx TLABWasteIncrement                        = 4                                   {product}
    uintx TLABWasteTargetPercent                    = 1                                   {product}
    uintx TargetPLABWastePct                        = 10                                  {product}
    uintx TargetSurvivorRatio                       = 50                                  {product}
    uintx TenuredGenerationSizeIncrement            = 20                                  {product}
    uintx TenuredGenerationSizeSupplement           = 80                                  {product}
    uintx TenuredGenerationSizeSupplementDecay      = 2                                   {product}
     intx ThreadPriorityPolicy                      = 0                                   {product}
     bool ThreadPriorityVerbose                     = false                               {product}
    uintx ThreadSafetyMargin                        = 52428800                            {product}
     intx ThreadStackSize                           = 0                                   {pd product}
    uintx ThresholdTolerance                        = 10                                  {product}
     intx Tier0BackedgeNotifyFreqLog                = 10                                  {product}
     intx Tier0InvokeNotifyFreqLog                  = 7                                   {product}
     intx Tier0ProfilingStartPercentage             = 200                                 {product}
     intx Tier23InlineeNotifyFreqLog                = 20                                  {product}
     intx Tier2BackEdgeThreshold                    = 0                                   {product}
     intx Tier2BackedgeNotifyFreqLog                = 14                                  {product}
     intx Tier2CompileThreshold                     = 0                                   {product}
     intx Tier2InvokeNotifyFreqLog                  = 11                                  {product}
     intx Tier3BackEdgeThreshold                    = 60000                               {product}
     intx Tier3BackedgeNotifyFreqLog                = 13                                  {product}
     intx Tier3CompileThreshold                     = 2000                                {product}
     intx Tier3DelayOff                             = 2                                   {product}
     intx Tier3DelayOn                              = 5                                   {product}
     intx Tier3InvocationThreshold                  = 200                                 {product}
     intx Tier3InvokeNotifyFreqLog                  = 10                                  {product}
     intx Tier3LoadFeedback                         = 5                                   {product}
     intx Tier3MinInvocationThreshold               = 100                                 {product}
     intx Tier4BackEdgeThreshold                    = 40000                               {product}
     intx Tier4CompileThreshold                     = 15000                               {product}
     intx Tier4InvocationThreshold                  = 5000                                {product}
     intx Tier4LoadFeedback                         = 3                                   {product}
     intx Tier4MinInvocationThreshold               = 600                                 {product}
     bool TieredCompilation                         = true                                {pd product}
     intx TieredCompileTaskTimeout                  = 50                                  {product}
     intx TieredRateUpdateMaxTime                   = 25                                  {product}
     intx TieredRateUpdateMinTime                   = 1                                   {product}
     intx TieredStopAtLevel                         = 4                                   {product}
     bool TimeLinearScan                            = false                               {C1 product}
     bool TraceBiasedLocking                        = false                               {product}
     bool TraceClassLoading                         = false                               {product rw}
     bool TraceClassLoadingPreorder                 = false                               {product}
     bool TraceClassPaths                           = false                               {product}
     bool TraceClassResolution                      = false                               {product}
     bool TraceClassUnloading                       = false                               {product rw}
     bool TraceDynamicGCThreads                     = false                               {product}
     bool TraceGen0Time                             = false                               {product}
     bool TraceGen1Time                             = false                               {product}
    ccstr TraceJVMTI                                =                                     {product}
     bool TraceLoaderConstraints                    = false                               {product rw}
     bool TraceMetadataHumongousAllocation          = false                               {product}
     bool TraceMonitorInflation                     = false                               {product}
     bool TraceParallelOldGCTasks                   = false                               {product}
     intx TraceRedefineClasses                      = 0                                   {product}
     bool TraceSafepointCleanupTime                 = false                               {product}
     bool TraceSharedLookupCache                    = false                               {product}
     bool TraceSuspendWaitFailures                  = false                               {product}
     intx TrackedInitializationLimit                = 50                                  {C2 product}
     bool TransmitErrorReport                       = false                               {product}
     bool TrapBasedNullChecks                       = false                               {pd product}
     bool TrapBasedRangeChecks                      = false                               {C2 pd product}
     intx TypeProfileArgsLimit                      = 2                                   {product}
    uintx TypeProfileLevel                          = 111                                 {pd product}
     intx TypeProfileMajorReceiverPercent           = 90                                  {C2 product}
     intx TypeProfileParmsLimit                     = 2                                   {product}
     intx TypeProfileWidth                          = 2                                   {product}
     intx UnguardOnExecutionViolation               = 0                                   {product}
     bool UnlinkSymbolsALot                         = false                               {product}
     bool Use486InstrsOnly                          = false                               {ARCH product}
     bool UseAES                                    = true                                {product}
     bool UseAESIntrinsics                          = true                                {product}
     intx UseAVX                                    = 2                                   {ARCH product}
     bool UseAdaptiveGCBoundary                     = false                               {product}
     bool UseAdaptiveGenerationSizePolicyAtMajorCollection  = true                                {product}
     bool UseAdaptiveGenerationSizePolicyAtMinorCollection  = true                                {product}
     bool UseAdaptiveNUMAChunkSizing                = true                                {product}
     bool UseAdaptiveSizeDecayMajorGCCost           = true                                {product}
     bool UseAdaptiveSizePolicy                     = true                                {product}
     bool UseAdaptiveSizePolicyFootprintGoal        = true                                {product}
     bool UseAdaptiveSizePolicyWithSystemGC         = false                               {product}
     bool UseAddressNop                             = true                                {ARCH product}
     bool UseAltSigs                                = false                               {product}
     bool UseAutoGCSelectPolicy                     = false                               {product}
     bool UseBMI1Instructions                       = true                                {ARCH product}
     bool UseBMI2Instructions                       = true                                {ARCH product}
     bool UseBiasedLocking                          = true                                {product}
     bool UseBimorphicInlining                      = true                                {C2 product}
     bool UseBoundThreads                           = true                                {product}
     bool UseCLMUL                                  = true                                {ARCH product}
     bool UseCMSBestFit                             = true                                {product}
     bool UseCMSCollectionPassing                   = true                                {product}
     bool UseCMSCompactAtFullCollection             = true                                {product}
     bool UseCMSInitiatingOccupancyOnly             = false                               {product}
     bool UseCRC32Intrinsics                        = true                                {product}
     bool UseCodeCacheFlushing                      = true                                {product}
     bool UseCompiler                               = true                                {product}
     bool UseCompilerSafepoints                     = true                                {product}
     bool UseCompressedClassPointers               := true                                {lp64_product}
     bool UseCompressedOops                        := true                                {lp64_product}
     bool UseConcMarkSweepGC                        = false                               {product}
     bool UseCondCardMark                           = false                               {C2 product}
     bool UseCountLeadingZerosInstruction           = true                                {ARCH product}
     bool UseCountTrailingZerosInstruction          = true                                {ARCH product}
     bool UseCountedLoopSafepoints                  = false                               {C2 product}
     bool UseCounterDecay                           = true                                {product}
     bool UseDivMod                                 = true                                {C2 product}
     bool UseDynamicNumberOfGCThreads               = false                               {product}
     bool UseFPUForSpilling                         = true                                {C2 product}
     bool UseFastAccessorMethods                    = false                               {product}
     bool UseFastEmptyMethods                       = false                               {product}
     bool UseFastJNIAccessors                       = true                                {product}
     bool UseFastStosb                              = true                                {ARCH product}
     bool UseG1GC                                   = false                               {product}
     bool UseGCLogFileRotation                      = false                               {product}
     bool UseGCOverheadLimit                        = true                                {product}
     bool UseGCTaskAffinity
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
2.2 java [-options] -jar jarfile [args...]
大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口。具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。比如有个叫做test.jar的jar包,里面有一个拥有main函数的类fu.zhi.zhe.MainClass。我们就只要在MANIFEST.MF里面添加如下一句话:fu.zhi.zhe.MainClass。然后我们可以在控制台里输入java -jar test.jar即可以运行这个jar。

当我们的项目需要引用其他第三方的jar包lib.jar,此时用java -jar执行这个test.jar的时候报找不到Class异常,原因就是jar引用不到放在自己内部的jar包。那怎么办?运行时将其加入classpath的方式行不行?就是在运行jar的同时加入classpath参数:

java -classpath lib.jar -jar test.jar

这种方式是不行的,因为使用classpath指定的jar是由AppClassloader来加载,java 命令 加了-jar 参数以后,AppClassloader就只关注test.jar范围内的class了,classpath参数失效。那该怎么引用其他的jar包呢?

方法一、使用Bootstrap Classloader来加载这些类

java -Xbootclasspath/a: some.jar;some2.jar; -jar test.jar
1.
方法二、使用Extension Classloader来加载

你可以把需要加载的jar都扔到<JAVA_HOME>\jre\lib\ext下面,这个目录下的jar包会在Bootstrap Classloader工作完后由Extension Classloader来加载。

方法三、还是用AppClassloader来加载,不过不需要classpath参数了

我们在MANIFEST.MF中添加如下代码:

Class-Path: lib/some.jar

lib是和test.jar同目录的一个子目录,test.jar要引用的some.jar包就在这里面。

如果有多个jar包需要引用的情况:

Class-Path: lib/some.jar lib/some2.jar

每个单独的jar用空格隔开就可以了。注意使用相对路径。

注:如果META-INF 下包含INDEX.LIST文件的话,可能会使Class-Path配置失效。INDEX.LIST是Jar打包工具打包时生成的索引文件,删除对运行不产生影响。

方法四、自定义Classloader来加载

这种方法是终极解决方案,基本上那些知名java应用都是那么干的,如tomcat、jboss等等。

注意:以上四种方法都可以用,特别是程序运行在非常单纯的环境中时。但是,如果是运行在多任务,多应用的环境中时,最好每个应用都能相互独立,第一种和第二种方案都有可能对其他应用产生影响,因此最好就是选择第三种和第四种。
-----------------------------------
javac 命令 javac 命令大全详解
https://blog.51cto.com/u_14120/6372613

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javac 命令 javac 命令大全详解---推荐看 的相关文章

随机推荐

  • spring IoC容器初始化简单分析

    首先分享一篇文章 对于IoC思想的理解 主题 我对IoC DI的理解 http www iteye com topic 1122310 我认为 里面最重要的一段话如下 理解IoC容器问题关键 控制的哪些方面被反转了 1 谁控制谁 为什么叫反
  • 查看Windows以及linux操作系统的CPU核数、位数、内存大小

    win7系统开始 就分为64位和32位 什么位的操作系统一般是由用户的硬件配置决定 32位系统最大只能支持3 5GB内存 如果在32位系统中使用的是4GB或者更大容量内存 电脑只可以识别到3 4GB可用 而64位系统最大可以支持128GB大
  • 校园无线网络服务器,某校园无线网络覆盖设计方案.doc

    PAGE PAGE 43 无线局域网 技术建议书 2009年9月 目 录 TOC o 1 3 h z u HYPERLINK l Toc240424971 1概述 PAGEREF Toc240424971 h 3 HYPERLINK l T
  • 在jupyter中操作matplotlib的相关操作(一)

    一 什么是GUI 图形用户界面 Graphical User Interface 简称 GUI 又称图形用户接口 是指采用图形方式显示的计算机操作用户界面 二 今天学习了matplotlib工具的绘图功能 具体包括 导入matplotlib
  • 目标服务器无响应,Android:org.apache.http.NoHttpResponseException:目标服务器无法响应...

    我的Android应用使用HttpClient HttpGet来访问REST API 我也设定了 httpGet addHeader Authorization Basic basicAuth 将Base64编码的 用户名 密码 发送到服务
  • 推荐系统(四)——因果效应uplift model系列模型S-Learner,T-Learner,X-Learner

    在之前的文章中我们介绍了使用因果推断中的去除混杂和反事实的相关理论来纠正推荐系统中的偏差问题 在这篇文章中主要和大家分享uplift model相关知识和方法 例子 小夏的商铺在上次请了明星代言后 销量有所上升 但是他不清楚是不是每个人都对
  • uView实现全屏选项卡

    直接复制粘贴即可使用
  • spring boot + aop 自定义日志--收集操作日志

    背景 spring boot aop 自定义注解收集controller层日志 自定义注解 1 1 自定义注解 pom xml
  • 互联网公司级别的简单划分(小白总结)

    1 小公司10 20人 2 稍大的公司 外包公司 3 普通上市公司 有限责任公司 股份制公司 4 知名互联网独角兽 5 央企 工作稳定 6 国企 一线国企 全员分红 年终奖 非一线国企 比一线稍差 7 BAT 美团 字节跳动 京东 注意 x
  • Go(九)指针

    目录 Go语言中的指针 1 1 指针地址和指针类型 1 2 指针取值 1 3 new和make 1 3 1 new 1 3 2 make 1 3 3 new与make的区别 区别于C C 中的指针 Go语言中的指针不能进行偏移和运算 是安全
  • msys64安装使用

    msys64安装使用 下载工具 安装 修改软件下载源 添加工具 查找软件名并安装 更新数据库 测试 之前安装的msys64由于某些原因出现密钥无法更新等问题 各种方法都试了还是处理不了 算了浪费时间耽误事直接卸载掉了 重新安装 最近看到有解
  • python初学者学习第1天

    python环境安装 要想学习 门新的编程语 少不了安装各种各样的软件和配置各种各样的环境 为此 给学习python的同学准备了 份环境安装指南 一 python安装包下载 需要从python官网 https www python org
  • 认识MSCI ESG评级

    认识MSCI ESG评级 成为ESG领导者 ESG特辑 商道纵横 ESG 环境 社会和公司治理 简称ESG 投资理念逐渐成为国际资本市场中的主流投资策略 对于投资者而言 要充分掌握企业的ESG表现 评估企业的环境社会贡献 需要具有公允力的E
  • RabbitMQ 登录控制台出现 “你与此网站的连接不是私密连接“

    解决方案 可能是创建容器时 密码没能成功设置进去 重新设置密码 先进入MQ容器中 我这里是用的docker 容器 docker exec it mq容器名 bash 查看用户 rabbitmqctl list users 修改密码 rabb
  • Python内置数据类型之List篇

    List的定义 li one two three four List是一个有序的集合 这点不同于Dictionary Dictionary是无序的 1 索引和切片 索引有正负之分 正索引下标从0开始 负索引下标从 1开始 比如 gt gt
  • 区块链和传统数据库有什么区别?

    都说区块链就是一种数据库 那区块链和传统数据库到底有什么区别呢 传统数据库拥有与其记录相关的授的客户机可以更改放在统一服务器上的部分 通过演进 ace副本 无论客户端在什么时候使用他们的PC访问数据库 他们都将获得数据库部分的更新适应 对数
  • python二维数组列表输出格式化:对齐数据(实例)

    学习python过程中遇到的问题 在这里记录一下 下面是二维列表 数组 格式化输出的实例 注意 t 有加后会自动对齐 a 学生学号 高等数学 高等物理 高等化学 程序语言 英文六级 个人平均成绩 201 t65 t58 t75 t80 t8
  • python保留小数位的三种方法

    python保留小数位的三种方法 保留小数位是我们经常会碰到的问题 尤其是刷题过程中 那么在python中保留小数位的方法也非常多 但是笔者的原则就是什么简单用什么 因此这里介绍几种比较简单实用的保留小数位的方法 方法一 format函数
  • PhpStorm64修改内存后不能启动

    审查phpstorm bat 这个bat文件应该是监控程序运行 并输出错误日志用的 在末尾加上pause查看完整的运行周期 JAVA EXE ALL JVM ARGS cp CLASS PATH com intellij idea Main
  • javac 命令 javac 命令大全详解---推荐看

    javac 命令 javac 命令大全详解 温柔一刀的技术博客 51CTO博客 1 javac 命令 用法 javac