Приложение Webstart не запускается с -Xmx2G на Java 8u60
У меня есть приложение Java Webstart, которое успешно запускается с -Xmx1G
, но не может начать с -Xmx2G
, Некоторые из моих пользователей действительно нуждаются в 2G кучи.
Кажется, это проблема только с Java 8u60, потому что у меня есть сообщение о том, что кто-то успешно запускает Java 8u51.
Ошибка выглядит следующим образом: я вижу синий экран-заставку "Java...", а затем через несколько секунд пуф исчезает, прежде чем отображать консоль Java и не выдает никакой информации о трассировке в ожидаемом месте.
Ошибка возникает только на тех клиентах, у которых доступно менее 2 ГБ памяти. Но я немного удивлен, что запрос "максимального" размера кучи может привести к сбою приложения так рано и без какой-либо диагностической информации. В конце концов, мы имеем дело с "максимальным" значением, а не с "начальным" значением. Я читал в нескольких местах, что JVM не должна этого делать.
Но я также вспомнил, что читал, что "начальный", если не указан, основан на максимуме. Итак, наряду с прохождением -Xmx2G
Я пробовал проходить -Xms512M
, -Xms256M
, а также -Xms128M
, Но эта попытка уменьшить начальный размер кучи не помогла. Я не могу получить эту вещь для начала -Xmx2G
!
Кто-нибудь может пролить свет на эту ситуацию? Решение? Обходной путь? В краткосрочной перспективе я перейду на -Xmx1G
, но, как я сказал в начале, у меня есть некоторые пользователи, которые действительно нуждаются -Xmx2G
, Я хотел бы избежать двух отдельных *.jnlp
файлы, которые также повлекут за собой наличие двух отдельных *.jar
файлы!
1 ответ
Оказывается, это именно то, что делает Webstart на Java8u60, если клиентскому компьютеру не хватает памяти для удовлетворения -Xmx
, Он пытается начать, а затем пуф, он исчезает без каких-либо указаний на то, что пошло не так.
Таким образом, в конечном итоге мне придется создавать свое приложение в разных конфигурациях, если я хочу позволить пользователям с большей памятью выделять эту память для моего приложения. Это связано с тем, что для подписи требуется, чтобы файл *.jnlp был включен в сам файл *.jar, а этот файл *.jnlp должен точно соответствовать файлу *.jnlp, используемому для запуска приложения.