JVM实例

时间:2010-09-06 14:50:50

标签: java jvm

通过两个不同的命令行调用java是否涉及两个不同的JVM或两个相同JVM的独立实例。

5 个答案:

答案 0 :(得分:23)

JVM是Java虚拟机,一种加载类(代码)和共享对象(数据)的内存空间。 JVM等同于操作系统进程。

当您在命令行中键入java...时,您正在执行一个独立的进程,该进程在内存中加载Java类,Java和您的基类(来自.class文件或.jar)。

另一个java...命令将使用自己的内存加载不同的进程,并自行加载类。

实例字混淆:当你说'同一个JVM的两个实例'时。通常将JVM的实例称为单独的进程,它是一个加载的独立JVM。如果你说:两个进程正在运行JVM 1.5,那么,它是相同的JVM,它是相同的版本,但它们是不同的进程,不同的“实例”,在所有意义上都是独立的。

Webapp混淆:一个webapp(通过示例)只是一组实例化的类和对象,参与Web服务器中的某些URL。您可以使用10个不同的应用程序启动Tomcat - 即10个不同的类和对象,每个类都参与不同的请求,但实际上它们共享相同的内存空间(操作系统进程)。 webapp无法触及其他webapp的对象,因为没有人给它引用其他对象(并且这些类在某种程度上是隐藏的,但这是另一个故事:class-loading)。

答案 1 :(得分:2)

你的问题有什么不同?我会说:两个不同的JVM实例。 :)

java命令的每次运行都会调用一个新的JVM实例。正在运行的java应用程序可以运行新的Java Threads(就像Tomcat对Web应用程序一样)。

答案 2 :(得分:2)

  • 如果您使用一个JDK版本为两个实例运行项目,则通过两个不同的命令行调用Java将涉及同一JVM的两个不同的实例
  • 如果每个应用程序使用不同的JDK版本,则将涉及两个不同的JVM。

答案 3 :(得分:1)

两个独立的JVM。你可以在同一个JVM中运行很多东西(比如说同一个Tomcat实例提供的10个webapp),但是只有1个java命令可以启动tomcat。

答案 4 :(得分:1)

如果您从同一源路径中的JDK / JRE版本1.6启动Sun的java.exe两次,您将获得两个独立且不同的JVM实例。除非您通过应用程序进行配置,否则它们之间不会共享。如果你想要运行两个不同的JVM,你必须从一个位置启动一个类型的java.exe(比如说1.5),而从另一个位置启动一个java.exe(版本1.6)。