簡體   English   中英

如何在現有JVM中運行程序?

[英]How to run a program inside an existing JVM?

我有一個已經運行的JVM。 我有它的processID。 現在我希望在這個JVM中運行一些其他Java代碼,即代碼應該在這個現有的JVM中運行,而不是在自己的JVM上運行。

我已經看過Attach API了 但是,它需要將代碼打包在JAR中。

還有其他方法嗎?

最簡單的方法似乎是使用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();
    }
  }
}

注意:我不知道您真正想要做什么,但如果它要與大型應用程序一起使用,您可能希望增加堆屬性以避免出現問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM