System.getProperties()仅返回Java系统属性(如java.version、os.name等),不包含JVM启动参数、环境变量或运行时信息;完整运行环境需组合System.getProperties()、getInputArguments()和System.getenv()三者。

直接调用 System.getProperties().list(System.out) 确实能打印 JVM 的系统属性,但它输出格式是简单列表(键=值),不带换行美化、无排序、也不包含所有“运行环境参数”——比如 JVM 启动参数(-Xmx、-Dfile.encoding)、系统环境变量(PATH、JAVA_HOME)或运行时信息(如 PID、启动时间)都不在 System.getProperties() 范围内。
System.getProperties() 实际包含哪些内容
它返回的是 Java 系统属性(java.*、os.*、user.*、file.* 等),由 JVM 初始化时自动设置,部分可被 -Dkey=value 覆盖。常见项包括:
-
java.version:JDK 版本 -
os.name/os.arch/os.version:操作系统信息 -
user.dir:当前工作目录 -
user.home:用户主目录 -
file.encoding:默认字符编码 -
java.class.path:类路径(-cp或CLASSPATH) -
java.library.path:本地库路径
如何真正获取“完整运行环境参数”
单靠 System.getProperties() 不够。需组合以下三类信息:
-
系统属性(
System.getProperties()):Java 层面的配置 -
JVM 启动参数:通过
ManagementFactory.getRuntimeMXBean().getInputArguments() -
系统环境变量:通过
System.getenv()
推荐的完整打印方式(Java 代码示例)
下面是一个简洁实用的打印方法,按类别分组、自动排序、对齐显示:
import java.lang.management.ManagementFactory;
import java.util.*;
<p>public class JvmEnvPrinter {
public static void main(String[] args) {
Properties props = System.getProperties();
Map<String, String> env = System.getenv();</p><pre class="brush:php;toolbar:false;"> // 1. JVM 启动参数
System.out.println("=== JVM Input Arguments ===");
ManagementFactory.getRuntimeMXBean().getInputArguments()
.forEach(System.out::println);
// 2. Java 系统属性(排序后打印)
System.out.println("\n=== System Properties ===");
props.stringPropertyNames().stream()
.sorted()
.forEach(key -> System.out.printf("%-30s = %s%n", key, props.getProperty(key)));
// 3. 系统环境变量(排序后打印)
System.out.println("\n=== Environment Variables ===");
env.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEach(e -> System.out.printf("%-30s = %s%n", e.getKey(), e.getValue()));
}}
注意事项与常见问题
-
System.getProperties().list(System.out)输出会混在控制台日志中,且没有标题和空行,不利于阅读;建议改用格式化打印 - 某些属性(如
sun.*)是内部实现相关,不同 JDK 版本可能不同,不建议强依赖 -
System.getenv()返回的是 OS 环境变量,**不包含** JVM 的-D参数;-D参数只影响System.getProperties() - 若需获取进程 PID,可用
ManagementFactory.getRuntimeMXBean().getName()(格式通常是"pid@hostname")


















