如何在现有JVM中运行程序?

时间:2015-03-19 13:59:28

标签: java jvm

我有一个已经运行的JVM。我有它的processID。 现在我希望在这个JVM中运行一些其他Java代码,即代码应该在这个现有的JVM中运行,而不是自己编写JVM。

我已经查看了Attach API。 但是,它需要将代码打包在JAR中。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法似乎是使用Attach API。但是,由于您不想使用它,您可能想要了解RMI / JMS / JMX,这也可以让您进行类似的操作。

如果使用标准java命令启动程序,则将为每个程序创建一个新VM。

然而,由于这看起来像XY问题,这里有一个更容易的选择,可能会让你做你想要的。

可以在VM的不同线程上运行程序。

这里有一个有趣的片段,可以创建一个简单的启动器,然后你可以启动程序,给你想要作为main方法的参数启动的每个程序的主类,它将为每个程序创建一个新的线程,但是一切都会在与启动器相同的VM上运行。

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();
    }
  }
}

注意:我不知道您真正想要做什么,但如果要与大型应用程序一起使用,您可能需要增加堆属性以避免出现问题。