Вы можете выполнить из своего пакетного файла, проверить уровень ошибок при выходе и перезапустить на более низкой памяти, если это не удалось. Я не уверен, что уровень ошибок сработает - если этого не произойдет, вы также можете проверить, сколько времени потребовалось для выполнения программы ... любая вещь менее чем за 10 секунд будет дешевой.
Только пара комментариев -
Если вы знаете, что НЕ НУЖНО больше 512, вам следует запустить тест, чтобы убедиться, что 1024 действительно помогает. Большие кучи часто могут сделать ваши паузы в GC длиннее и больше ничего не делать.
Если вы почти уверены, что будете использовать определенное количество оперативной памяти (скажем, куча легко заполнит 512, которые вы выделяете), вам, вероятно, следует установить min для этого числа. Установка минимального и максимального значения на 512 хорошо, если ваша программа выделяет кучу вещей, но не ситуативна (всегда использует примерно одинаковое количество оперативной памяти)