对于这个面板,大家都非常熟悉了吧。这是Java程序启动时配置相关参数的面板。今天我们聊聊启动时主要配置的三个参数:VM options、Program arguments、Environment variables。

VM options 虚拟机选项

VM options,为虚拟机选项。

其大致可分为三种:

  • 标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

我们可以在控制台直接输入:java命令查看所有的标准参数

最常用的 -D<名称>=<值>这个选项,这个选项是设置系统属性。如

-Dspring.profiles.active=dev

设置的系统属性,我们可以通过System.getProperty()获得

  • 非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

在控制台输入java -X可查看所有非标准参数

经常使用的jvm堆大小就是通过非标准参数设置

    -Xms<size>        设置初始 Java 堆大小
    -Xmx<size>        设置最大 Java 堆大小
    -Xss<size>        设置 Java 线程堆栈大小
复制代码
  • 非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

如:

-XX:NewSize=341m,设置年轻代初始值为341M。 -XX:MaxNewSize=341m,设置年轻代最大值为341M。 
-XX:PermSize=512m,设置持久代初始值为512M,但在java8及之后就不支持了,改用XX:MetaspaceSize=512m。 
-XX:MaxPermSize=512m,设置持久代最大值为512M,同样在java8及之后就不支持了,改用-XX:MaxMetaspaceSize=512m。
复制代码

Program arguments 程序参数

这里的配置参数为主类的main方法的参数

public static void main(String[] args)
复制代码

Environment variables 环境变量

Environment variables 为环境变量,可通过System.getenv()方法获得。

如何通过命令形式设置参数

VM options、Program arguments 参数设置很简单(在控制台输入java之后,第一行就告诉我们用法了)

示例:

java -Dphone=xiaomi -classpath "D:\code\my\bread\out\production\bread;" com.carrywei.bread.basic.Environment a b c

说明:

「-Dphone=xiaomi -classpath "D:\code\my\bread\out\production\bread;"」为Vm option

「com.carrywei.bread.basic.Environment」为运行的类

「a b c」为 Program arguments

Environment variables参数的设置,并不是在程序启动时设置的。它可以配置在系统的环境变量里,也可以在运行的终端设置临时的环境变量(只在此终端生效)

Windows系统设置使用SET命令,Linux使用export命令

Windows 演示效果

小结

Java启动各种配置项保证了我们同一套代码可通过不同的配置运行在不同的环境上。开发环境使用开发配置,测试环境使用测试配置,生产环境使用生产配置。


作者:D调的蜀威
链接:https://juejin.cn/post/6993330238717427748