调用java是创建新的JVM实例还是只创建另一个Java进程?

时间:2012-04-28 02:17:58

标签: java jvm

每当我们启动Java程序时:

java Herpyl.java -derp

这是在另一个JVM实例上创建另一个 JVM实例还是另一个Java进程?我对JVM和“Java”或“Java进程”之间的关系感到困惑。提前谢谢!

2 个答案:

答案 0 :(得分:6)

每次java调用都会启动自己的JVM。

在进程之间共享一个JVM具有安全性和稳定性方面的问题:如果一个进程杀死了JVM,那么您也杀死了另一个进程,而另一个进程实际上应该无法在没有正确权限的情况下读取/修改其他进程的数据(别忘了你可以从java进程中调用任意JNI代码)。

如果你担心内存消耗:是的确确增加了内存,但任何现代操作系统都会映射不同的dll和其他东西 - 在我的win7 x64机器上,一个空闲的javaw进程有一个~300kb的私有工作集。 / p>

答案 1 :(得分:2)

根据Oracle documentation

  

java工具启动Java应用程序。这是通过开始一个   Java运行时环境,加载指定的类,并调用它   阶级的主要方法

Java Runtime Environment包括Java虚拟机和执行Java应用程序所需的其他组件(如库)。