且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

java命令

更新时间:2022-08-22 09:59:30

    JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。

1,Java Runtime Environment(JRE)

它是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。

  JVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。

  JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

2,Java工具

包含java,javac,jar命令等。

3,Java基础类库

Java API 包括$JAVA_HOME/lib中相关jar文件等。


一,java的两种启动方式

[root@zw_51_99 ~]# java
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

1,java命令可以指定一个jar包执行,直接忽略任何环境变量。

2,直接指定一个main class执行。jvm会根据环境变量所指定的路径去jar,zip文件中找寻main函数。

对jar文件的简单介绍:

    JAR 文件格式以流行的 ZIP 文件格式为基础,用于将许多个文件聚集为一个文件。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

    一个可执行的 jar文件是一个自包含的 Java 应用程序,它存储在特别配置的 JAR 文件中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。

1,创建可执行 JAR

创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是 com.mycompany.myapp.Sample。您要创建一个包含应用程序代码的 JAR 文件并标识出主类。为此,在某个位置 ( 不是在应用程序目录中 ) 创建一个名为 manifest的文件,并在其中加入以下一行:

 Main-Class: com.mycompany.myapp.Sample

然后,像这样创建 JAR 文件:

# jar cmf manifest ExecutableJar.jar application-dir

一个可执行的 JAR 必须通过 menifest 文件的头引用它所需要的所有其他从属 JAR。如果使用了 -jar选项,那么环境变量 CLASSPATH 和在命令行中指定的所有类路径都被 JVM 所忽略。

2,启动可执行 JAR

既然我们已经将自己的应用程序打包到了一个名为 ExecutableJar.jar 的可执行 JAR 中了,那么我们就可以用下面的命令直接从文件启动这个应用程序:

# java -jar ExecutableJar.jar


二,java环境变量

1. PATH环境变量。

作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在系统任何目录下执行javac/java等工具了。 

2. CLASSPATH环境变量。

指定一个用于查找类文件的列表,它可以是目录、 JAR 归档文件和 ZIP 归档文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。 

3. JAVA_HOME环境变量。

它指向jdk的安装目录,默写软件如Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 


三,java命令常用标准选项:

1,-classpath/-cp 设置类路径。指定一个用于查找类文件的列表,它可以是目录、 JAR 归档文件和 ZIP 归档文件。类路径项用分号 (;) 分隔。指定 -classpath 或 -cp 将覆盖CLASSPATH 环境变量和默认路径的所有设置。

如果不使用 -classpath 和 -cp,且没有设定 CLASSPATH ,则用户类路径由默认为当前目录 (.) 构成。

2,-D<name>=<value>

设置系统属性的name和value,可以自己定义name,java可以通过System.out.println(System.getProperty("name")); 获得value值。相当于给java程序传参。

3,-verbose[:class|gc|jni]

-verbose:class

显示每个所加载的类的信息。

-verbose:gc

报告每个垃圾收集事件。

-verbose:jni

报告有关本地方法的使用和其它 Java 平台相关代码接***动的信息。

4,-jar

执行封装在 JAR 归档文件中的程序。第一个参数是 JAR 归档文件的名称而不是启动类名。启动类由 Main-Class 清单头指定。JAR 文件是所有用户类的源,其它的CLASSPATH变量或者-classpath,-cp选项的设置将被忽略。

5,-version

显示版本信息并退出。

-version:<value>

指定对应版本的java去运行程序

-showversion  

显示java程序版本,并继续其它操作

6,-?

-help

显示用法信息并退出。

7,-X

显示非标准选项的有关信息并退出。

8,-server

使用server模式运行虚拟机,在运行时性能和内存管理效率更好。默认情况下,为server模式。

9,-enableassertions[:<packagename>...|:<classname>]

从JDK1.4开始,java可支持断言机制,用于诊断运行时问题。通常在测试阶段使断言有效,在正式运行时不需要运行断言。断言后的表达式的值是一个逻辑值,为true时断言不运行,为false时断言运行,抛出java.lang.AssertionError错误。

上述参数就用来设置虚拟机是否启动断言机制,缺省时虚拟机关闭断言机制,用-ea 可打开断言机制,不加<packagename>和classname时运行所有包和类中的断言,如果希望只运行某些包或类中的断言,可将包名或类名加到-ea之后。例如要启动包com.foo.util中的断言,可用命令 –ea:com.foo.util 。

10,-da[:<packagename>...|:<classname>]

       -disableassertions[:<packagename>...|:<classname>]

用来设置虚拟机关闭断言处理,packagename和classname的使用方法和-ea相同。

11,-esa | -enablesystemassertions

设置虚拟机显示系统类的断言。

12,-dsa | -disablesystemassertions

设置虚拟机关闭系统类的断言。 

13,-agentlib:<libname>[=<options>]

该参数是JDK5新引入的,用于虚拟机装载本地代理库。

Libname 为本地代理库文件名,虚拟机的搜索路径为环境变量PATH中的路径,options为传给本地库启动时的参数,多个参数之间用逗号分隔。在Windows 平台上虚拟机搜索本地库名为libname.dll的文件,在Unix上虚拟机搜索本地库名为libname.so的文件,搜索路径环境变量在不同系统上有所不同,Linux、SunOS、IRIX上为LD_LIBRARY_PATH,AIX上为LIBPATH,HP-UX上为SHLIB_PATH。

例如可使用-agentlib:hprof来获取虚拟机的运行情况,包括CPU、内存、线程等的运行数据,并可输出到指定文件中,可用-agentlib:hprof=help来得到使用帮助列表。在jre"bin目录下可发现hprof.dll文件。

14,-agentpath:<pathname>[=<options>]

设置虚拟机按全路径装载本地库,不再搜索PATH中的路径。其他功能和agentlib相同。

15,-javaagent:<jarpath>[=<options>]

虚拟机启动时装入java语言设备代理。Jarpath文件中的mainfest 文件必须有Agent-Class属性。代理类要实现public static void premain(String agentArgs, Instrumentation inst)方法。当虚拟机初始化时,将按代理类的说明顺序调用premain方法。 copyright dedecms 

参见:java.lang.instrument


四,java命令常用非标准选项:

1、-Xmixed           mixed mode execution (default) 

混合模式执行 

2、-Xint             interpreted mode execution only 

解释模式执行 

3、-Xbootclasspath: 

      set search path for bootstrap classes and resources 

设置zip/jar资源或者类(.class文件)存放目录路径 

3、-Xbootclasspath/a: 

      append to end of bootstrap class path 

追加zip/jar资源或者类(.class文件)存放目录路径 

4、-Xbootclasspath/p: 

      prepend in front of bootstrap class path 

预先加载zip/jar资源或者类(.class文件)存放目录路径 

5、-Xnoclassgc       disable class garbage collection 

关闭类垃圾回收功能 

6、-Xincgc           enable incremental garbage collection 

开启类的垃圾回收功能 

7、-Xloggc:    log GC status to a file with time stamps 

记录垃圾回日志到一个文件。 

8、-Xbatch           disable background compilation 

关闭后台编译 

9、-Xms        set initial Java heap size 

设置JVM初始化堆内存大小 

10、-Xmx        set maximum Java heap size 

设置JVM最大的堆内存大小 

11、-Xss        set java thread stack size 

设置JVM栈内存大小 

12、-Xprof            output cpu profiling data 

输入CPU概要表数据 

13、-Xfuture         enable strictest checks, anticipating future default 

执行严格的代码检查,预测可能出现的情况 

14、-Xrs             reduce use of OS signals by Java/VM (see documentation) 通过JVM还原操作系统信号 

15、-Xcheck:jni       perform additional checks for JNI functions 

对JNI函数执行检查 

16、-Xshare:off       do not attempt to use shared class data 

尽可能不去使用共享类的数据 

17、-Xshare:auto      use shared class data if possible (default) 

尽可能的使用共享类的数据 

18、-Xshare:on       require using shared class data, otherwise fail. 

尽可能的使用共享类的数据,否则运行失败


五,java命令不稳定参数

不稳定参数(-XX),这类参数在JVM 中是不稳定的,不适合日常使用的,后续也是可能会在没有通知的情况下就直接取消了,需要慎重使用。但是,对应jvm调优很有帮助。










本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/1419427,如需转载请自行联系原作者