Мы отправляем приложение Java, чья потребность в памяти может сильно варьироваться в зависимости от размера обрабатываемых данных. Если вы не установите максимальный размер виртуальной памяти (VM), довольно часто JVM завершает работу с сбоем GC на больших данных.
Мы хотели бы видеть, что JVM запрашивает больше памяти, поскольку GC не может обеспечить достаточно, пока общая доступная VM не будет исчерпана. например, начать с 128 Мб и увеличивать геометрически (или какой-либо другой шаг) всякий раз, когда GC не удалось.
Командная строка JVM ( "Java" ) позволяет явно устанавливать максимальные размеры VM (различные команды -Xm *), и вы думаете, что это будет спроектировано так, чтобы быть адекватным. Мы пытаемся сделать это в файле .cmd, который мы отправляем с приложением. Но если вы выберете какой-то конкретный номер, вы получаете одно из двух плохих поведений: 1) если ваш номер достаточно мал, чтобы работать на большинстве целевых систем (например, 1 Гбит), он недостаточно велик для больших данных или 2) если вы сделаете его очень большим, JVM откажется работать в тех системах, фактическая VM которых меньше указанных.
Как настроить Java для использования доступной виртуальной машины при необходимости, не зная этого числа заранее и не захватывая все это при запуске?