Если у вас есть пользовательский интерфейс или демон, чтобы вы могли контролировать вывод в stdout, вы можете создать оболочку снаружи, которая запускает вашу программу.
Если программа при выходе выдает «RESTART», вы можете перезапустить вашу программу снова из этой оболочки. Если нет, это просто заканчивается.
Или, если вам нужен чистый Java-способ, вы можете воспользоваться решением для загрузчиков классов, как упомянул Питер Лоури в своем посте. Прежде чем идти по этому пути, вы должны по-настоящему переосмыслить свой дизайн (если это ваш код) и сделать свой код способным к самоочищению.