java命令行参数详解引言创建和编译应用java的命令

引言

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

作为一个java程序员,我始终保持谦逊进取的态度去对待,始终重视基础知识的学习,我觉得工作久了势必需要一些工具在身边,我的老大老是diss我,说我能发现和解决问题,但是效率不高,那是因为我每次都面向百度编程,没有收集和整理工具的习惯,于是就有了本篇文章。

读完本篇文章你会了解到java命令参数的含义,并可初步使用java命令来更好的启动和创建我们的应用。

创建和编译应用

image.png

这里可以看到一些内置命令工具,我按使用程度对他们进行了排序:

java的命令行参数描述

这么多工具,我们主要来介绍java命令,文档里说明了:当我们使用java命令启动应用时,该应用就通过jre来加载特定的类,并调用main方法,该方法必须声明为 public 和 static,它不能返回任何值,并且它必须接受一个 String 数组作为参数。

image.png

java命令的选项参数

java命令给我们提供了非常多的命令参数,当然也有非常多的划分,但我认为主要是两种划分:第一种是按选项进行划分,第二种是按照使用环境区分,我们可以使用java命令来看下:

image.png

选项划分

  • 标准选项:以“-”开头,比如-help -version,Java 虚拟机 (JVM) 的所有实现都保证支持标准选项。

  • 非标准选项:以“-X”开头,特定于Java HotSpot 虚拟机的通用选项,因此不能保证所有 JVM 实现都支持它们,并且可能会发生变化。

  • 高级选项:以“-XX”开头,这些是用于调整 Java HotSpot 虚拟机操作的特定区域的开发人员选项,这些区域通常具有特定的系统要求,并且可能需要对系统配置参数的特权访问。也不能保证所有 JVM 实现都支持它们,并且可能会发生变化。

  • 布尔选项:用于启用默认禁用的功能或禁用默认启用的功能。此类选项不需要参数。布尔 -XX 选项使用加号 (-XX:+OptionName) 启用,使用减号 (-XX:-OptionName) 禁用。

使用环境划分

1.系统属性

java -D:设置属性值
java -D属性名 = 属性值
比如:java -Dfile.encoding=utf-8

image.png

2.运行模式

java -server 选择虚拟机模式,默认是“server”
java虚拟机在启动应用时,启动器会对虚拟机模式进行检测,检测应用是否在服务器上的机器运行,如果是,那就以服务器的模式运行,目的是提高性能。

java虚拟机分为客户端模式和服务器模式,客户端模式下默认-Xms是1M,-Xmx是64M,适用于占用内存小,启动更快的产品,而服务端模式默认-Xms是128M,-Xmx是1024M,启动慢,但运行时性能和内存管理效率高,适用于生产环境。

  • java -Xmixed 混合模式执行 (默认)
  • java -Xint 仅解释模式执行

3.堆内存设置

-Xms<size>        设置初始 Java 堆大小
-Xmx<size>        设置最大 Java 堆大小
-Xss<size>        设置 Java 线程堆栈大小
-Xms<size>        设置初始 Java 堆大小
-Xmx<size>        设置最大 Java 堆大小
-Xmn<size>        设置最大java年轻代堆大小
复制代码

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:OnError="userdump.exe %p"

-XX:OnOutOfMemoryError=string 与上面一样。

6.JavaAgent

-javaagent:<jarpath>[=<选项>]
              加载 Java 编程语言代理, 请参阅 java.lang.instrument
复制代码