System.getProperty 与 JVM参数

本文介绍了System类中Properties的相关操作。Properties初始化由虚拟机完成,其属性因机器和环境而异。可通过System.setProperty设置属性,借助VM options设置运行参数。还能使用System.getProperty获取属性值,若未指定对应key,可返回null或默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 :Properties 的初始化 initProperties()

System类内部封装了一个Properties对象,其初始化方法由native修饰

在初始化System类时,由虚拟机完成Properties的初始化工作,根据机器以及环境不同,初始化完成后的属性也会不同。

 

二:设置属性,System.setProperty(String key,String value) 

嗯,没啥好说的

这里引申到另一个知识点

VM options : JVM虚拟机启动命令可选项,在这里可以设置一些运行参数等。参数大致可分为标准(-D等)和非标准(-X、-XX)两种,非标准的可选项不保证在所有平台上都实现,并且未来的版本中可能会被修改且不告知,总之就是不稳定(Unstable)。不过有的非标准可选项还是非常有用的。(这里不做详细介绍,参考另一文章)

在设置VM参数时,如果我们需要自定义一些参数信息(这个行为称之为,设置系统属性),则必须使用-Dkey=value这种形式

通过这里设置的参数,JVM在初始化时,会对System中的Properties进行对应赋值,所以我们也可以通过System.getProperty(String key)获取到(仅限-D形式的键值对标准参数可获取,其他格式以及非标准参数无法读取到)

 

package packone;

import java.util.Properties;

/**
 * @author LiFeng
 * @create 2020-10-29 15:29
 * @describe
 */
public class TestArg {

    public static void main(String[] args) {
        Properties properties = System.getProperties();
	    System.out.println(properties.size());
        properties.forEach((a, b) -> System.out.println(a + " >> " + b));
        for (String str : args) {
            System.out.println(str);
        }
    }
}

输出结果如下:

-------------------------------------------------------------------------------------------------------------------------------
55
sun.cpu.isalist >> amd64
sun.desktop >> windows
sun.io.unicode.encoding >> UnicodeLittle
sun.cpu.endian >> little
java.vendor.url.bug >> http://bugreport.sun.com/bugreport/
file.separator >> \
java.vendor >> Oracle Corporation
sun.boot.class.path >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\classes
java.ext.dirs >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
java.version >> 1.8.0_201
java.vm.info >> mixed mode
awt.toolkit >> sun.awt.windows.WToolkit
user.language >> zh
java.specification.vendor >> Oracle Corporation
sun.java.command >> packone.TestArg a b c d
java.home >> C:\Program Files\Java\jdk1.8.0_201\jre
sun.arch.data.model >> 64
java.vm.specification.version >> 1.8
java.class.path >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;E:\git\practice\getResource\target\classes;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\lib\idea_rt.jar
user.name >> Administrator
file.encoding >> UTF-8
java.specification.version >> 1.8
java.awt.printerjob >> sun.awt.windows.WPrinterJob
user.timezone >>
user.home >> C:\Users\Administrator
os.version >> 6.1
sun.management.compiler >> HotSpot 64-Bit Tiered Compilers
java.specification.name >> Java Platform API Specification
java.class.version >> 52.0
java.library.path >> C:\Program Files\Java\jdk1.8.0_201\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java\jdk1.8.0_201\jre\bin;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\plugins\maven\lib\maven3\bin;D:\curl-7.64.1\I386;D:\redis\;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin;.
sun.jnu.encoding >> GBK
os.name >> Windows 7
user.variant >>
java.vm.specification.vendor >> Oracle Corporation
name >> mika
java.io.tmpdir >> C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator >>

java.endorsed.dirs >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\endorsed
os.arch >> amd64
java.awt.graphicsenv >> sun.awt.Win32GraphicsEnvironment
java.runtime.version >> 1.8.0_201-b09
java.vm.specification.name >> Java Virtual Machine Specification
user.dir >> E:\git\practice
user.country >> CN
user.script >>
sun.java.launcher >> SUN_STANDARD
sun.os.patch.level >> Service Pack 1
java.vm.name >> Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg >> sun.io
path.separator >> ;
java.vm.vendor >> Oracle Corporation
java.vendor.url >> http://java.oracle.com/
sun.boot.library.path >> C:\Program Files\Java\jdk1.8.0_201\jre\bin
java.vm.version >> 25.201-b09
java.runtime.name >> Java(TM) SE Runtime Environment
a
b c
d

-------------------------------------------------------------------------------------------------------------------------------

设置方式举个栗子:-D参数名="参数值"  多个参数之间空格分隔


 

Program arguments:这里设置的值是作为main方法的参数String[] args传入的,用的不多,不做过多解释

多个参数之间用空格分隔,假如参数自身带有空格,则需要用引号包裹

再插入另外一个小知识点,以IDEA为例(eclipse也有),提供了许多常用变量的取值方式。可以省事很多

 

三:属性获取

System.getProperty(String key)

返回的数值,比如java.version,java.home,os.name,user.home以及user.dir等等,如果Properties初始化完成后,并没有指定对应的key,则返回null

System.getProperty(String key,String def)

获取指定key对应名称的属性值,假如没有的话,返回默认值def


java.version                                                                                          Java 运行时环境版本 
java.vendor                                                                                           Java 运行时环境供应商 
java.vendor.url                                                                                      Java 供应商的 URL 
java.home                                                                                             Java 安装目录 
java.vm.specification.version                                                                Java 虚拟机规范版本 
java.vm.specification.vendor                                                                Java 虚拟机规范供应商 
java.vm.specification.name                                                                  Java 虚拟机规范名称 
java.vm.version                                                                                    Java 虚拟机实现版本 
java.vm.vendor                                                                                     Java 虚拟机实现供应商 
java.vm.name                                                                                       Java 虚拟机实现名称 
java.specification.version                                                                     Java 运行时环境规范版本 
java.specification.vendor                                                                      Java 运行时环境规范供应商 
java.specification.name                                                                        Java 运行时环境规范名称 
java.class.version                                                                                 Java 类格式版本号 
java.class.path                                                                                      Java 类路径 
java.library.path                                                                                     加载库时搜索的路径列表 
java.io.tmpdir                                                                                         默认的临时文件路径 
java.compiler                                                                                         要使用的 JIT 编译器的名称 
java.ext.dirs                                                                                           一个或多个扩展目录的路径 
os.name                                                                                                操作系统的名称 
os.arch                                                                                                  操作系统的架构 
os.version                                                                                             操作系统的版本 
file.separator                                                                                         文件分隔符(在 UNIX 系统中是"/") 
path.separator                                                                                      路径分隔符(在 UNIX 系统中是":") 
line.separator                                                                                       行分隔符(在 UNIX 系统中是"/n") 
user.name                                                                                            用户的账户名称 
user.home                                                                                            用户的主目录 
user.dir                                                                                                 用户的当前工作目录 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值