Если я запускаю конкретный процесс прямо из командной строки, я вижу, что он полностью запускается через 2-3 секунды.
Если я запускаю тот же самый процесс с той же самой командой из программы Java, он зависает при запуске, если только родитель не будет уничтожен. Почему?
С ProcessBuilder:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File(dir));
Process p = pb.start();
С Runtime.exec:
Runtime.getRuntime().exec(cmd, null, new File(dir));
В любом случае, если я не установлю для нового объекта Process значение null и сразу же вызову сборщик мусора, новому процессу потребуется до 3 минут, чтобы сделать то же самое, что он должен сделать за 3 секунды.
Process p = pb.start();
p = null;
Runtime.getRuntime().gc();
Использование приведенного выше кода устраняет проблему. Может кто-нибудь объяснить мне, почему? Я думаю, что это связано с обработкой процессов JVM, но это всего лишь предположение.
Новый процесс использует Hibernate для подключения к базе данных MySQL, записывает файлы журналов с помощью log4j, читает из файла .properties и подключается к серверу RabbitMQ.
Спасибо,
хорошего дня