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