每当我们启动 Java 程序时:
java Herpyl.java -derp
这是在创建另一个JVM 实例,还是在同一个 JVM 实例之上创建另一个 Java 进程?我对 JVM 和“Java”或“Java 进程”之间的关系感到困惑。提前致谢!
每个 java 调用都会启动它自己的 JVM。
在进程之间共享一个 JVM 存在安全性和稳定性方面的问题:如果一个进程杀死了 JVM,那么您也杀死了另一个进程,而另一个进程真的不应该能够在没有正确权限的情况下读取/修改另一个进程的数据(不要不要忘记您可以从您的 java 进程中调用任意 JNI 代码)。
如果您担心内存消耗:是的,这确实会增加内存,但是任何现代操作系统都会映射不同的 dll 和其他东西——在我的 win7 x64 机器上,一个空闲的 javaw 进程有一个 ~300kb 的私有工作集。
根据Oracle 文档:
java 工具启动 Java 应用程序。它通过启动 Java 运行时环境、加载指定的类并调用该类的 main 方法来做到这一点
Java 运行时环境包括 Java 虚拟机和执行 Java 应用程序所需的其他组件(如库)。