Java args[]在整个jvm生命周期中都可用吗?

Java args[]在整个jvm生命周期中都可用吗?,java,jvm,Java,Jvm,Java vm参数可以在以后的某个时间点通过调用: ManagementFactory.getRuntimeMXBean().getInputArguments() 此调用显式排除主参数 返回传递给Java虚拟机的输入参数,该虚拟机不包括主方法的参数 一旦main方法存在,通过命令行提供参数的操作就会从内存中删除,这是安全的吗?还是我们可以自己安全地进行清理?(在这个特定的示例中,我希望用户提供一个加密/解密密钥),该密钥应尽可能短地保留在内存中 假设通过命令行提供参数安全吗 一旦主方法存在,

Java vm参数可以在以后的某个时间点通过调用:

ManagementFactory.getRuntimeMXBean().getInputArguments()
此调用显式排除主参数

返回传递给Java虚拟机的输入参数,该虚拟机不包括主方法的参数

一旦main方法存在,通过命令行提供参数的操作就会从内存中删除,这是安全的吗?还是我们可以自己安全地进行清理?(在这个特定的示例中,我希望用户提供一个加密/解密密钥),该密钥应尽可能短地保留在内存中

假设通过命令行提供参数安全吗 一旦主方法存在,就会从内存中擦除

绝对不是


命令行是OS进程的一个属性。无论启动什么JVM或什么应用程序,只要进程存在,操作系统就会保留原始命令行。例如,在Linux上,它可以通过
/proc/PID/cmdline

访问。不,假设任何东西都不安全,尤其是涉及安全性时。显然,您无法通过该方法(在任何时候)访问程序参数,但这与通过其他方式无法访问程序参数不同。您甚至可以尝试从Java端(自Java 9起)查询它:
ProcessHandle.current().info().arguments()