[置顶] Java启动命令大观
Java启动命令是所有java应用程序的入口,通过它来启动Java运行时环境,并加载相关的class。不过由于IDE的盛行,我们Java程序员中的大多数的并不是非常的了解Java启动命令。本文希望做一个Java启动命令的汇总,和各位同道分享,也便于日后作为自己的参考。
Java启动命令语法
Java启动命令有两个,java
以及javaw
,它们的唯一区别是javaw
不会启动一个控制台窗口(启动失败的时候会弹出附有错误信息的窗口),而java
会。不希望有控制台的时候用javaw
,其它时候用java
。它们的语法结构都一样,只需要记住其中一个即可。调用程序有两种方式,指定Class以及指定jar文件,具体的语法如下:
- java [options] class [arguments]
- java [options] -jar file.jar [arguments]
- javaw [options] class [arguments]
- javaw [options] -jar file.jar [arguments]
其中[options]表示Java运行环境的可选配置信息,会影响java运行环境,是性能调优的关键所在,可以传多个选择项。class表示的是包含main函数的class名称(含包名)。-jar和file.jar配对使用,-jar指示用jar方式启动,而file.jar表示的时jar文件的名称,替换为自己的jar文件名字即可。[arguments]表示的是程序自身的参数,会被传到main函数的参数数组里面,为程序自己所使用。
Java启动命令可选项(options)
Java启动命令可选项(options)大致可分为标准和非标准两种,非标准的可选项不保证在所有平台上都实现,并且未来的版本中可能会被修改且不告知,总之就是不稳定(Unstable)。不过有的非标准可选项还是非常有用的,后面我们会谈到。
标准可选项(Standard options)
-client 与 -server
以clien或者server模式启动,二选一,Java运行时环境会依场景来优化自己的配置策略。值得指出的是64位的Java不支持client模式,默认就是server。不同平台的默认配置可以参考Server-Class Machine Detection-cp 和 -classpath
最重要的可选项之一,指定Java运行时环境搜索class的路径。-cp只是-classpath的简写,做相同的事情,用其中之一即可。多个路径用英文里面的分号分隔。如果-cp和-classpath都没有使用,CLASSPATH环境变量也没用设定,那么就是当前路径(.)。-Dproperty=value
设定系统属性值,比如编码-Dencoding=UTF-8。可以设定一些系统使用的属性,也可以用来向程序传递值,比如程序的根目录。 可以通过System.getProperty("keyname")
来获取属性。-help与-?
都是要求显示帮助信息disableassertions[:packagename...|:classname]与da[:packagename...|:classname]
禁用断言,可以指定包名(注意包后面的三个点)或者class的名称。默认就是禁用的。da只是disableassertions的缩写,使用方法完全一样。 禁用包:da:org.slf4j...
禁用类:da:org.slf4j.LoggerFactory
enableassertions[:packagename...|:classname]与ea[:packagename...|:classname]
启用断言,可以指定包名(注意包后面的三个点)或者class的名称。ea只是enableassertions的缩写,使用方法完全一样。 启用包:ea:org.slf4j...
启用类:ea:org.slf4j.LoggerFactory
disablesystemassertions与dsa
禁用系统类(syetem class)断言enablesystemassertions与esa
启用系统类(syetem class)断言-version 与 -showversion
这两个都显示Java的版本信息,不过后者会把help的信息也显示出来。verbose:class, verbose:gc, "verbose:jni"
verbose:class显示class加载信息,verbose:gc显示Java垃圾回收的信息。verbose:jni显示JNI(Java Native Interface)信息。-agentlib:agentlibname[=options]与-agentpath:pathtoagent[=options]
都是加载本地代理库(Native Agent Library),-agentlib只需要library的名称,且会根据不同的操作系统转为对应的文件(Windows为DLL)。 -agentpath指定library的绝对路径。
非标准可选项(Nonstandard Options)
非标准的可选项都以-X开始,其中的部分选项如下:
-X
显示所有非标准选项的信息。看看都有些什么非标准选项吧。java -X
。-Xms<size>
设置Java堆的初始化大小。例如 -Xms1024m,Java堆的初始化大小就设置为1G。-Xmx<size>
设置Java堆的最大值。例如 -Xmx3072m,Java堆的最大值就设置为3G。-Xss<size>
设置Java线程栈的值。例如 -Xss128m,Java线程栈的值就设置为128兆。-Xnoclassgc
禁用Java垃圾回收器。-Xincgc
启用Java增量式垃圾回收器。-Xmixed
解释模式和编译模式混合执行-Xint
仅解释模式执行-Xshare:on,-Xshare:off,-Xshare:auto 设定类数据共享CDS(Class data sharing)是否开启。-Xshare:on要求一定要用共享的类数据;-Xshare:auto表示让系统自己判断 是否有类共享数据,有就用,没有不用;-Xshare:off禁用共享类数据。
-Xcheck:jni
针对JNI函数做额外的检查
不稳定(Unstable)的选项
不稳定的选项当然是非标准的,都以-XX开头。这一类参数有很多,暂时只列其中的几个:
-XX:PermSize<=size>和-XX:MaxPermSize<=size>
设置Java永久保存区域(Permanent Generation Space)的大小。PermSize设置初始值,MaxPermSize设置最大值。 该区域主要存储class的信息,且不会被 垃圾回收器回收,如果加载的class过多,就会报错:java.lang.OutOfMemoryError: PermGen space。 -XX:PermSize=64m -XX:MaxPermSize=128m,表示Java永久保存区域大小初始化问为64兆,最大为128兆。-XX:+UseParallelGC
开启并行Java回收器-XX:+PrintGCDetails
显示比-verbose:gc
更多更准确的垃圾回收信息-XX:+TraceClassLoading
显示类加载以及卸载的信息
程序参数(arguments)
class或者jar文件之后的字符串会传给main函数的String[] args
参数,多个参数用空格隔开。如果某一个参数包含多个单词,那么需要用引号包起来。当有很多程序参数,且有的必填,有的可选的时候,如果不设计好,顺序是很头疼的问题。一种解法是传键值对(key=value),完全不用在意参数的顺序。在main函数里面把键值对解析成Map,然后再校验以及使用。简单的示例代码如下:
public static void main(String[] args) {
Map<String, String> arguments = getArguments(args);
for (String key : arguments.keySet()) {
System.out.println(key + "=" + arguments.get(key));
}
} public static Map<String, String> getArguments(String[] args) {
Map<String, String> arguments = new HashMap<String, String>(); if (args == null || args.length == 0) {
return arguments;
} for (String arg : args) {
int index = arg.indexOf("=");
// 没有=,或者=是第一个,都出错。
if (index < 1) {
throw new RuntimeException("param must be key value pair");
} String key = arg.substring(0, index);
String value = arg.substring(index + 1);
arguments.put(key, value);
} return arguments;
}
参考链接
[置顶] Java启动命令大观的更多相关文章
- Java启动命令与Maven打包设置
一.Java启动命令 java程序的启动方式有三种: 1.java -jar 生成的jar包中,manifest文件定义了Main Class,可使用该命令 java -jar test.jar 2. ...
- 007-aven-assembly-plugin和maven-jar-plugin打包,java启动命令
一.需求 打一个zip包,包含如下: bin为程序脚本,启动和停止 lib为依赖包 根目录下为配置文件和项目jar包 二.知识储备 2.1.插件了解 plugin function maven-jar ...
- [置顶]
docker1.12--docker命令行帮助文档
镜像操作 build 使用dockerfile方式创建镜像 使用dockerfile文件docker build dockerflle/,dockerfile文件默认位于dockerflle/Dock ...
- [置顶] linux常用命令大全
SSH 密令控制台 user/pwd 一:停止tomcat 1,cd .. 进入根目录 2,cd home/ 3,ll 4,cd bin/ 进入tomcat bin目录 5,ll 6,ps -ef | ...
- [置顶]
Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...
- [置顶]
Linux 常用命令集锦
出处:http://www.vaikan.com/what-are-the-most-useful-swiss-army-knife-one-liners-on-unix/ Linux命令行里的&qu ...
- [置顶] Java Web开发教程来袭
Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...
- [置顶] java ant 配置及构建项目
Ant是一种基于Java的构建工具.Ant文件是配置构建目标过程的XML文件,也称为Ant脚本. (因为对这个不是很了解,所以用词方面可能于个人的理解有偏差 ...
- [置顶] Java套接字Socket编程
1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...
随机推荐
- 237. Delete Node in a Linked List(C++)
237. Delete Node in a Linked Lis t Write a function to delete a node (except the tail) in a singly l ...
- php 连接mysql数据库并显示数据 实例 转载
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Binary Tree Level Order Traversal II 解题思路
思路: 与Binary Tree Level Order Traversal I 几乎一样.只是最后将结果存放在栈里,然后在栈里再传给向量即可. 再次总结思路: 两个queue,先把第一个放进q1,循 ...
- CSS+Javascript的那些框架
CSS CSS 制作框架 SASS http://www.oschina.net/p/sass Blueprint http://www.oschina.net/p/blueprintcss Ela ...
- about python
函数式编程 λ演算 LISP,Erlang 尾递归 栈的使用 避免防御式编程 ER实体Entity关系relationship OOP [OOA/D] 属性.行为 继承.聚合.关联 抽象.封装 笛卡尔 ...
- Linux内存映射(mmap)系列(1)
看到同事的代码中出现了mmap.所以自己私下学习学习,研究研究..... http://www.cnblogs.com/lknlfy/archive/2012/04/27/2473804.html ( ...
- strong ,weak
有时我们写个代码开源出来给别人用时,会被其他开发者抱怨编译不了,很多情况是版本的问题,尤其现在ARC的出现后关于weak,strong的问题让人头疼.有个开源代码这里做的很不错,就是MBProgres ...
- Codeforces Round #205 (Div. 2) : C
感觉像是一个数位dp,高位的1如果不选的话,前面低位的数都可以选:不然只能选择为1的数: 代码: #include<iostream> #include<algorithm> ...
- WebService:设置服务器提供SOAP1.2的服务
1,访问通过cxf发布的服务 (1)与之前一样,同样可以通过在本地通过wsdl文件和命令行生成Java文件来访问服务. 但是我们既然使用了cxf发布,就要通过cxf的工具生成访问.可以通过cxf目录的 ...
- Keil_C51程序调试过程
调试一般都是在发生错误与意外的情况下使用的.如果程序能正常执行,调试很多时候都是用不上的.所以,最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题. 单片机的程序调试分为两种,一种是使 ...