Как правильно назначить огромное пространство кучи для JVM

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

У меня есть приложение, которое используется для визуализации огромных медицинских данных, которые могут потреблять до нескольких гигабайт памяти, если несколько томов изображений открываются по размеру. Кэширование данных для просмотра имеет важное значение для быстрого рабочего процесса. Программное обеспечение поддерживается рабочими станциями Windows и запускается с загрузчика, который назначает размер кучи и запускает основное приложение. Фактическая память, необходимая для основного приложения, прямо пропорциональна просматриваемым данным и не может быть определена загрузчиком, так как это потребует чтения данных, что, в конечном счете, потребует слишком много времени.

Таким образом, чтобы гарантировать, что JVM будет иметь достаточно памяти во время запуска, мы настроили размер xmx настолько большим, насколько мы посмели, основываясь на текущем дизайне, на максимальной физической памяти рабочей станции. Однако есть ли у этого недостаток? Я прочитал (из поста за 2008 год), что собственные процессы могут увеличить лишнюю память, что может привести к ошибкам памяти во время выполнения. Должен ли я также найти свободную виртуальную память или размер файла подкачки, прежде чем назначать пространство кучи? Как бы вы справились с этой ситуацией?

Ох, и это мой первый пост на этих форумах. Приятно познакомиться и быть нежным!:)

Обновить:

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

Я пришел к решению о назначении кучи 70% физической памяти, если имеется достаточный объем виртуальной памяти - иначе меньше.

2 ответа

Лучше не устанавливать максимальную память JVM более 60-70% памяти рабочей станции, в некоторых случаях даже ниже, по двум основным причинам. Во-первых, из-за механики ГХ то, что JVM потребляет на физической машине, может быть на 20% или более больше, чем куча. Во-вторых, представление конкретного объекта данных в куче JVM может быть не единственной физической копией этого объекта в ОЗУ машины, поскольку ОС имеет кеши и буферы и т. Д. Вокруг различных устройств ввода-вывода, с которых она захватывает эти объекты.

Размеры кучи могут составлять около 28 ГБ, что мало сказывается на производительности, особенно если у вас большие объекты. (множество мелких объектов может повлиять на время паузы ГХ)

Размеры кучи 100 ГБ возможны, но имеют обратные стороны, в основном потому, что они могут иметь большое время паузы. Если вы используете Azul Zing, он может обрабатывать гораздо большие размеры кучи значительно более изящно.

Основным ограничением является размер вашей памяти. Если ваша куча превышает это, ваше приложение и ваш компьютер будут работать очень медленно / будут неработоспособными.

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

Другие вопросы по тегам