Получить JVM для увеличения потребности в памяти по мере необходимости до предела размера виртуальной машины? - PullRequest
16 голосов
/ 20 июля 2009

Мы поставляем Java-приложение, чья потребность в памяти может сильно различаться в зависимости от размера обрабатываемых данных. Если вы не установите максимальный размер виртуальной памяти (VM), довольно часто JVM завершает работу с ошибкой GC на больших данных.

Что мы хотели бы видеть, так это то, что JVM запрашивает больше памяти, поскольку GC не может предоставить достаточно, пока не будет исчерпан общий объем доступной виртуальной машины. например, начните с 128 МБ и увеличивайте геометрически (или какой-либо другой шаг) всякий раз, когда ГХ не работает.

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

Как настроить Java на использование доступной виртуальной машины при необходимости, не зная заранее этого номера и не захватывая все это при запуске?

Ответы [ 14 ]

0 голосов
/ 20 июля 2009

Я не думаю, что Sun или IBM JVM могут сделать это (я знаю, что AS / 400 можно, но это, скорее всего, не относится к вам).

Я бы предложил использовать Java WebStart (и перед тем, как вы откажетесь от этого, обратите внимание, что он был обновлен с помощью Java 6 u 10 и намного лучше подходит для запуска «локальных» приложений и апплетов), поскольку он позволяет « маленький экземпляр "," большой экземпляр "," гигантский экземпляр "в виде ссылок / значков.

Скорее всего, вы заглянете в параметры «Внедрить приложение в кэш веб-запуска» и «Офлайн».

0 голосов
/ 20 июля 2009

Это обсуждение является спорным, если вы думаете, что ваши клиенты могут запросить 2-3 ГБ ОЗУ на своей 32-битной машине. Операционная система и другие приложения также будут работать на весах.

Звучит так, как будто ваше приложение достигает точки, где ему требуется 64-разрядная операционная система и намного больше оперативной памяти.

0 голосов
/ 20 июля 2009

Я не думаю, что вы можете делать то, что пытаетесь сделать; вместо этого вам придется отправить инструкции , специфичные для ваших клиентов, их систем и их требований о том, как они могут изменить ваш файл .cmd, чтобы увеличить объем памяти.

Конечно, если ваш продукт предназначен для очень нетехнических пользователей, вы можете скрыть это за более удобным для пользователя конфигурационным файлом. Э.Г.

# HIGH, MEDIUM, LOW - please change as appropriate. The guidelines are:
#                       * HIGH - users who generate 500 items per day
#                       * MEDIUM - 200-500 items etc
memoryUsage=MEDIUM

или, возможно, развертывание различных конфигурационных файлов в зависимости от того, какой продукт опция , которую пользователь указывает при первом заказе продукта.

0 голосов
/ 20 июля 2009

В аргументах виртуальной машины есть две опции, которые можно использовать: -Xms для установки размера памяти при запуске и -Xmx для установки максимального размера памяти ...

Вы можете установить низкую загрузочную память и большую максимальную, чтобы виртуальная машина выделяла новую память только при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...