You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在可列出全部JVM参数名称的枚举类?

关于JVM参数名称枚举类的问题

JDK标准库中没有官方提供的枚举类(或类似结构)来枚举所有JVM参数名称,原因在于JVM参数(包括标准系统属性、JDK特定非标准属性、厂商私有参数)数量众多且会随JDK版本迭代增减,官方不会维护一个静态的、覆盖所有参数的枚举类。

不过你可以通过以下方式解决“避免硬编码参数字符串调用System.getProperty()”的需求:

1. 自定义枚举类(最贴合需求)

根据你项目中实际用到的JVM参数,自行创建枚举类来统一管理参数名称,示例如下:

public enum JvmPropertyName {
    SSL_KEY_STORE("javax.net.ssl.keyStore"),
    TLS_SERVER_PROTOCOLS("jdk.tls.server.protocols"),
    USER_DIR("user.dir"),
    JAVA_VERSION("java.version")
    // 按需添加更多参数
    ;

    private final String name;

    JvmPropertyName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    // 封装获取参数值的方法,简化调用
    public String getValue() {
        return System.getProperty(name);
    }
}

使用时直接通过枚举调用,比如JvmPropertyName.SSL_KEY_STORE.getValue(),彻底避免硬编码字符串。

2. 借助第三方库的常量定义

部分第三方工具库会封装常用的系统/JVM属性名称为静态常量,比如:

  • Apache Commons Lang的SystemUtils类:包含JAVA_VERSION、USER_DIR等常用属性的常量定义
  • Spring Framework的SystemPropertyUtils类:也提供了部分系统属性的常量和解析工具

不过这类库仅覆盖常用参数,无法包含所有JVM参数,且不是枚举类型,但同样能减少硬编码。

3. 动态获取所有参数(按需使用)

如果需要遍历当前JVM的所有参数,可通过以下API动态获取:

  • 获取所有系统属性:System.getProperties()
  • 获取JVM启动参数:ManagementFactory.getRuntimeMXBean().getInputArguments()

但这种方式是动态获取,无法实现静态枚举的编译期校验,适合需要批量处理参数的场景。

内容的提问来源于stack exchange,提问作者Stan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:32:38