Производительность практически одинакова, поскольку в обоих случаях происходит одно и то же.Например, на платформе UNIX / Linux:
- Текущий процесс 'разветвлен'.
- Новый дочерний процесс 'exec выполняет команду' java ', передавая указанную командную строкуАргументы.
- Запускается дочерняя JVM ...
Возможны вторичные различия в производительности.Например, способ, которым стандартные дочерние потоки ввода / вывода / ошибки обрабатываются родителем, может отличаться.Но обычно вы можете забыть о подобных вещах.
[Как отмечает @Amadan, использование загрузчика классов для запуска приложения Java в текущей JVM значительно более эффективно ... потому что позволяет избежать накладных расходов JVMзапуск, JIT-компиляция общего кода и т. д. Но главный недостаток (помимо простоты) заключается в том, что у «родительского» приложения нет эффективного способа управления «дочерним» приложением, работающим в той же JVM.Если ребенок застревает в цикле или вообще не справляется с управлением ресурсами, родитель тоже страдает.]