Java命令行参数详解

简介: Java命令行参数详解

最近在学习Gradle相关的知识。下载Gradle源码后,未能成功导入IDEA运行。所以想另辟蹊径,通过命令行来调试运行Gradle程序。经过一番搜索和思考。发现Java通过jdwp可以远程调试java程序的。在实践的过程中,对一些命令行参数的含义不是特别清楚。故有此篇文章。


1. java命令 Oracle官方文档链接


java命令是用来启动一个Java程序的。


2. 概览


java [ options ] class [ arguments ]


java [ options ] -jar file.jar [ arguments ]


options

Command-line options. See Options.

class

The name of the class to be called.

file.jar

The name of the JAR file to be called. Used only with the -jar command.

arguments

The arguments passed to the main function.

3. 命令参数详解



java命令通过启动Java运行时环境,加载指定的类并调用该类的main方法来启动一个Java应用程序
指定的class需要声明一个main方法,格式如下:
public static void main(String[] args)

如果java命令后面没有option参数,那么紧跟其后的第一个参数就是Class的全路径二进制名。例如 java com.test.Test。如果指定了-jar。那么-jar后面跟的就是个包含了main方法的JAR文件,例如 java -jar Test.jar


Java虚拟机启动的时候需要加载启动类和其他需要用到的类。查找的顺序分别是启动类路径,扩展类路径,以及用户类路径。可以通过java -verbose:class查看类加载的顺序


Options


当前的Java虚拟机支持的Options分成Standard Options和NonStandard Options


1. Standard Options

-client

-server


两种java虚拟机的启动方式,默认是用server模式


-agentlib:libname[=options]

加载Native agent library,举例说明:
-agentlib:hprof dump堆栈
-agentlib:jdwp=help 命令行调试帮助
-agentlib:hprof=help dump堆栈的帮助

-agentpath:pathname[=options]


通过library的全路径名加载


-cp classpath

这个参数是用来指定类加载的路径。可以指定一个或者多个目录,JAR文件,或者ZIP文件,类加载会从指定的文件中查找。如果有多个文件用:隔开
如果-classpath或-cp和CLASSPATH都没有指定,那么默认会从执行java命令的当前目录查找类
为了方便,我们还可以用通配符*来代替多个路径
例如,如果目录mydir包含a.jar和b.JAR,则类路径元素mydir / *将扩展为A.jar:b.JAR,但不指定jar文件的顺序。列表中包含指定目录中的所有jar文件,包括隐藏的文件。一个仅包含*的类路径条目
展开为当前目录中所有jar文件的列表。定义的CLASSPATH环境变量将被类似地扩展。任何类路径通配符扩展都在Java VM启动之前发生。除了通过查询环境外,没有任何Java程序会看到没有扩展的通配符。例如,通过调用System.getenv(“CLASSPATH”)。

-Dproperty=value设置系统属性.


设置系统属性.


-d32

-d64


在32位或64位模式下运行

-disableassertions[:package name”…” | :class name ]
-da[:package name”…” | :class name ]

禁用断言

-enableassertions[:package name”…” | :class name ]
-ea[:package name”…” | :class name ]


开启断言


-verbose


-verbose:class


显示类加载的信息


-verbose:gc


打印GC信息


-verbose:jni


打印jni相关信息


2. NonStandard Options


-X


打印出NonStandard Options(非标准参数)的帮助信息,并退出jvm


-Xint


让虚拟机只在解释型模式下运行,不允许生成本地指令(就是禁用JIT)。有可能会损失性能


-Xbatch


禁止后台编译。通常jvm编译方法是在后台进行的。


-Xnoclassgc


禁止Class常量被垃圾回收器回收。有可能会导致OutOfMemoryError


-Xincgc


开启增量垃圾回收。可以降低GC暂停时间


-Xloggc:file


打印GC log到指定文件。和-verbose:gc一起使用


-Xmnsize or -XX:NewSize


指定年轻代的大小


-Xmsn


指定java堆的初始大小


例子:


-Xms6291456

-Xms6144k

-Xms6m

-Xmxn


指定java堆的最大大小


例子:

-Xmx83886080

-Xmx81920k

-Xmx80m


-Xprof


分析正在运行的程序,并将分析数据发送到标准输出。该选项作为一个在程序开发中很有用的实用程序提供,并不打算用于生产系统。


-Xssn


设置java线程栈大小


-Xverify:mode


是否校验字节码格式。mode有如下三种


remote 默认方式。校验所有非bootstrap class loader加载类的字节码


all 校验所有的字节码


none 不校验字节码。但是目前没有支持


-XX:+|-DisableAttachMechanism


是否允许Java VM被命令attach。默认是关闭的。如果要开启可以如下命令


java -XX:+DisableAttachMechanism


-XX:+|-FlightRecorde


性能分析工具。


-XXLargePageSizeInBytes=n


Specifies the maximum size for large pages.


-XX:MaxGCPauseMillis=n


设置最大的GC 暂停时间


-XX:NewSize


同-Xmnsize.


-XX:ParallelGCThreads=n


设置并行垃圾回收的线程数量


-XX:+UseConcMarkSweepGC or -XX:+UseG1GC


开启Concurrent Mark Sweep (CMS) 或 G1 垃圾回收器.


-XX:+PrintGCDetails -XX:+PrintGCTimeStamps


打印带时间戳的垃圾回收日志

相关文章
|
5月前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
58 1
|
4月前
|
Java API 编译器
Java编译器注解运行和自动生成代码问题之编译时通过参数设置选项值问题如何解决
Java编译器注解运行和自动生成代码问题之编译时通过参数设置选项值问题如何解决
|
4月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
41 0
|
23天前
|
存储 算法 Java
java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
这篇文章是关于如何在Java中使用Graphics2D的RenderingHints方法来提高海报制作的图像质量和文字清晰度,包括抗锯齿和解决文字不清晰问题的技术详解。
30 0
java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
|
29天前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
42 1
|
3月前
|
Java
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
|
3月前
|
消息中间件 Java 大数据
"深入理解Kafka单线程Consumer:核心参数配置、Java实现与实战指南"
【8月更文挑战第10天】在大数据领域,Apache Kafka以高吞吐和可扩展性成为主流数据流处理平台。Kafka的单线程Consumer因其实现简单且易于管理而在多种场景中受到欢迎。本文解析单线程Consumer的工作机制,强调其在错误处理和状态管理方面的优势,并通过详细参数说明及示例代码展示如何有效地使用KafkaConsumer类。了解这些内容将帮助开发者优化实时数据处理系统的性能与可靠性。
84 7
|
3月前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
253 0
|
3月前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
3月前
|
运维 监控 Java
【JVM 调优秘籍】实战指南:JVM 调优参数全解析,让 Java 应用程序性能飙升!
【8月更文挑战第24天】本文通过一个大型在线零售平台的例子,深入探讨了Java虚拟机(JVM)性能调优的关键技术。面对应用响应延迟的问题,文章详细介绍了几种常用的JVM参数调整策略,包括堆内存大小、年轻代配置、垃圾回收器的选择及日志记录等。通过具体实践(如设置`-Xms`, `-Xmx`, `-XX:NewRatio`, `-XX:+UseParallelGC`等),成功降低了高峰期的响应时间,提高了系统的整体性能与稳定性。案例展示了合理配置JVM参数的重要性及其对解决实际问题的有效性。
94 0