Если я запускаю определенный процесс непосредственно из командной строки, я вижу, что он полностью запускается через 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.
Спасибо,
хорошего дня