2011-06-07 133 views
23

假设我在同一台机器上同时运行两个java程序。这些程序是运行在单个JVM实例中,还是运行在两个不同的JVM实例中?同时运行在同一个JVM上运行的java程序?

+1

他们可能共享dll,甚至编译类(取决于实现和配置)。 – 2011-06-07 12:08:36

回答

22

如果您使用java命令(从命令行)启动每个命令,它们将作为完全独立的JVMs运行。

“程序”可以作为独立的Threads在一个JVM中运行而启动。

+0

它依赖于供应商,但对于标准的Oracle JVM for Windows/Linux/OS x – 2014-03-12 16:34:06

1

它依赖于平台和JVM实现,但通常它们将运行在单独的VM中。

1

假设你的意思是程序这个词的过程,那么是的,启动两个进程将创建两个不同的JVM。

使用java应用程序启动器启动JVM进程;这应该为您的程序提供一个入口点,这是主要方法。您可以链接到此入口点的其他类以及其他类。这将继续发生在同一个JVM进程中,除非你启动另一个进程(运行另一个程序)。

0

程序是运行在单个JVM实例中还是将运行在两个不同的JVM实例中?

这取决于你。最简单的方法是使用单独的JVM。

0

你可以做的是使用两个独立的线程。对于exampe

new Thread() { 
    public void run() { 
    System.out.println("this is running separately from the main thread!"); 
    } 
}.start(); 

如果你想两个独立的程序进行交互,你需要使用套接字

13

java只需一次打开启动一个应用程序,但你可以写一个简单的发射是采取类名称作为参数并在不同的线程中执行它们。快速概要:

public class Launcher { 
    public static void main(String[] args) throws Exception { 
    for (int i = 0; i<args.length; i++) { 
     final Class clazz = Class.forName(args[i]); 
     new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try{ 
      Method main = clazz.getMethod("main", String[].class); 
      main.invoke(null, new Object[]{}); 
      } catch(Exception e) { 
      // improper exception handling - just to keep it simple 
      } 
     } 
     }).start(); 
    } 
    } 
} 

调用它像

java -cp <classpath for all applications!> Launcher com.example.App1 com.example.App2 

应执行相同的虚拟机内部和并行应用程序App1和App2。

相关问题