假设我在同一台机器上同时运行两个Java程序,那么这些程序会在一个JVM实例中运行还是在两个不同的JVM实例中运行?
答案:这两个Java程序将在两个不同的JVM实例中运行。每个Java程序都需要它自己的JVM实例来执行,因为JVM提供了应用程序与底层操作系统之间的接口,以及内存管理和垃圾回收等重要功能。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。
这取决于平台和JVM实现,但通常它们会在单独的虚拟机中运行。
假设您所说的程序是指进程,那么是的,启动两个进程将创建两个不同的JVM。
JVM进程是使用Java应用程序启动器启动的;这应该提供了一个入口点到您的程序,即主方法。您可以从此入口点链接到其他类,也可以从其他类链接。除非您启动另一个进程(以运行另一个程序),否则这将在同一个JVM进程中继续发生。
new Thread() {
public void run() {
System.out.println("this is running separately from the main thread!");
}
}.start();