Запуск программ Java в одном экземпляре среды выполнения - PullRequest
2 голосов
/ 13 мая 2009

Мне интересно, возможно ли такое: У меня есть Java-программа, которая принимает аргументы и дает вывод на консоль. Что мне нужно, это запустить его несколько раз - он (JAR-файл) работает гладко, но накладные расходы на запуск и остановку Java-среды выполнения являются слишком большими. Есть ли способ один раз создать экземпляр времени выполнения Java (или VM, я не уверен, как его вызвать), а затем несколько раз как-то подключиться к этому времени выполнения и выполнить jar?

Я надеюсь, что, несмотря на мое серьезное незнание терминологии Java, кто-то сможет ответить на мой вопрос: D.

Ответы [ 4 ]

11 голосов
/ 13 мая 2009

Должно быть просто написать класс-обертку, который вызывает основной класс JAR и периодически вызывает AppClass.main () с соответствующими аргументами:

// wraps class MyWrapped
class MyWrapper {

public static void main(String[] args) {
   for (each set of command-line args) {
       MyWrapped.main(arguments);
   }
}

Помните, что метод main () Java-приложения не является чем-то особенным, это просто статический метод, который вы можете вызвать сами. Он может даже вызываться несколькими потоками одновременно, если он правильно спроектирован.

0 голосов
/ 13 мая 2009

Обратите внимание, что приведенный очевидный подход НЕ перезагружает классы между экземплярами. Если вы измените статические поля, поля НЕ будут повторно инициализированы!

Если это может быть проблемой, попробуйте переписать, чтобы справиться с этим. Другой подход может заключаться в поиске решения на основе контейнера OSGi, так как они не позволяют отдельным сегментам видеть друг друга, поэтому каждый вызов имеет классы, загруженные самостоятельно.

0 голосов
/ 13 мая 2009

По какой причине вы не можете просто запустить этот цикл?

0 голосов
/ 13 мая 2009

Может быть лучше спроектировать, чтобы создать основную оболочку, которая выполняет ваш код несколько раз. Думайте об этом в этих терминах. Создайте файл класса и вызывайте метод столько раз, сколько вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...