Java命令讲解
Posted 晨港飞燕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java命令讲解相关的知识,希望对你有一定的参考价值。
读完本篇文章你会了解到java命令参数的含义,并可初步使用java命令来更好的启动和创建我们的应用。
一.创建和编译应用
这里可以看到一些内置命令工具:
java:Launches a Java application.,启动一个java应用比如java -jar
javac:Reads Java class and interface definitions and compiles them into bytecode and class
files.,编译工具,将源代码编译成字节码或者class文件
javap:Disassembles one or more class files.,反汇编
javadoc:Generates html pages of API documentation from Java source files.java API文档生成工具
jar:Manipulates Java Archive (JAR) files.操作jar包的,jar包本质上也是zip文件。
jdb:Finds and fixes bugs in Java platform programs.java debug,有idea后几乎不用了。
二.常用命令的选项参数
java命令
使用java命令启动应用时,该应用就通过jre来加载特定的类,并调用main方法,该方法必须声明为 public 和 static,它不能返回任何值,并且它必须接受一个 String 数组作为参数。
C:\\Users\\Administrator>java -help
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已过时, 将在
未来发行版中删除。
在版本搜索中包括/排除用户专用 JRE
-? -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>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅:
http://www.oracle.com/technetwork/java/javase/documentation/index.html
另外,这个命令的非标准选项也是很重要的,常常在JVM优化配置方面很关键
C:\\Users\\Administrator>java -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:system
(仅限 Linux)显示系统或容器
配置并继续
-XshowSettings:all
显示所有设置并继续
-XshowSettings:vm 显示所有与 vm 相关的设置并继续
-XshowSettings:properties
显示所有属性设置并继续
-XshowSettings:locale
显示所有与区域设置相关的设置并继续
-X 选项是非标准选项。如有更改,恕不另行通知。
三.命令划分
java命令给我们提供了非常多的命令参数,当然也有非常多的划分,但我认为主要是两种划分:第一种是按选项进行划分,第二种是按照使用环境区分,我们可以使用java命令来看下:
1.选项划分
标准选项:以“-”开头,比如-help -version,Java 虚拟机 (JVM) 的所有实现都保证支持标准选项。
非标准选项:以“-X”开头,特定于Java HotSpot 虚拟机的通用选项,因此不能保证所有 JVM 实现都支持它们,并且可能会发生变化。
高级选项:以“-XX”开头,这些是用于调整 Java HotSpot 虚拟机操作的特定区域的开发人员选项,这些区域通常具有特定的系统要求,并且可能需要对系统配置参数的特权访问。也不能保证所有 JVM 实现都支持它们,并且可能会发生变化。
布尔选项:用于启用默认禁用的功能或禁用默认启用的功能。此类选项不需要参数。布尔 -XX 选项使用加号 (-XX:+OptionName) 启用,使用减号 (-XX:-OptionName) 禁用。
2.使用环境划分
1).系统属性
java -D:设置属性值java -D属性名 = 属性值比如:java -Dfile.encoding=utf-8
2).运行模式
java -server 选择虚拟机模式,默认是“server”java虚拟机在启动应用时,启动器会对虚拟机模式进行检测,检测应用是否在服务器上的机器运行,如果是,那就以服务器的模式运行,目的是提高性能。
java虚拟机分为客户端模式和服务器模式,客户端模式下默认-Xms是1M,-Xmx是64M,适用于占用内存小,启动更快的产品,而服务端模式默认-Xms是128M,-Xmx是1024M,启动慢,但运行时性能和内存管理效率高,适用于生产环境。
java -Xmixed 混合模式执行 (默认)
java -Xint 仅解释模式执行
3).堆内存设置
4).GC设置
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseParNewGC
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
5).分析诊断
-XX:+HeapDumpOnOutOfMemoryError:异常堆的快照,默认关闭,示例:-XX:+HeapDumpOnOutOfMemoryError -Xmx 256m 再指定个文件名
-XX:HeapDumpPath=path与上面的配合使用,指定转存文件目录,示例:-XX:HeapDumpPath=C:/log/java/java_heapdump.log
-XX:OnError=string,当错误发生的时候运行的命令,%p代表当前进程示例:-
-XX:OnOutOfMemoryError=string 与上面一样。
6).JavaAgent
参考:
log4j相关文章:
以上是关于Java命令讲解的主要内容,如果未能解决你的问题,请参考以下文章