为什么 JVM 在没有 JAVA_HOME 的情况下工作?

Why JVM work when there is not JAVA_HOME?

$ env
...

当我尝试在 macOS 上打印我的 shell 环境时,我发现没有 JAVA_HOME,但我的 JVM 仍然有效。

所以我很困惑,我只是想了解JVM如何在shell env没有指示的情况下找到JDK的位置env

那我的JDK位置是/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk,如果我把这个文件夹移出去,JVM就不行了

我知道这是没用的,而且很愚蠢。但我只是想完全了解这是如何工作的,请帮忙。

JVM 不需要JAVA_HOME 环境变量。一旦你将它安装在 /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk 内部 bin 目录被添加到 PATH 环境变量(或一些其他机制如 update-alternatives 用于放置 java在系统中可执行 PATH).

通常是需要 JVM 的第 3 方工具(例如 Apache Maven 或 Tomcat)使用 JAVA_HOME 环境变量来查找已安装的 JVM。