Кажется, что управление памятью Java Web Start (JWS) отличается в 32 и 64 битах - PullRequest
0 голосов
/ 14 февраля 2019

Мы работаем над (большой) системой, которая работает как приложение Java Web Start.Таким образом, пользователь загружает файл JNLP и запускает его на своем компьютере.

У нас были проблемы с некоторыми пользователями, утверждающими, что приложение зависает при открытии нескольких окон.Мы сделали несколько тестов, и причина ясна и повторяема:

  • Если пользователь открывает файл JNLP с помощью 32-битной JVM, максимальный объем памяти остается равным 256 МБ, и как только этот порог будет превышен,приложение освобождает память на 0% и зависает.
  • Если один и тот же пользователь открывает тот же файл JNLP с помощью 64-битной JVM, максимальный объем памяти начинается с 256 МБ, но, поскольку системе требуется больше памяти, JVM резервируети использует его свободно, до 1 ГБ, если необходимо.

Мы провели несколько тестов, и ситуация всегда одинакова.

Есть ли способ для 32-битной JVMвести себя точно так же, как 64-битный?Я знаю, что мы можем установить максимальный размер кучи, но конечный пользователь может иметь 1 ГБ, 2 ГБ или 3 ГБ свободной памяти, и мы хотели бы, чтобы он или она могли использовать их при необходимости, что в точности и происходит с 64-разрядной версией..

Мы используем Java 8, обновление 201.

Потребности приложения в памяти зависят от того, сколько окон вы открываете.Для обычного использования 256 МБ-512 МБ было бы более чем достаточно, но некоторым пользователям было бы полезно иметь возможность открывать 7-10 экранов, а это могло бы составить до 800 МБ-1 ГБ ОЗУ.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы должны указать память, необходимую для приложения, в файле JNLP с использованием параметра max-heap-size и не зависеть от клиентской системы:

<java version="1.8" initial-heap-size="256m" max-heap-size="1024m"/>

В большинстве случаев по умолчаниюКуча JVM составляет самое большее 25% доступной системной памяти .Если у некоторых пользователей есть только 1 ГБ ОЗУ, они никогда не получат кучи более 256 МБ, если вы сами не укажете это.

Обратите внимание, что, поскольку вы поддерживаете 32-битные JVM, вы не можете перейти2 ГБ.

...