[英]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.