2011-03-03 4 views
5

Мы разрабатываем приложение swing, написанное Java, которое требует только около 128 МБ памяти, и в ближайшем будущем я не вижу, что для этого потребуется гораздо больше памяти, например, 4 ГБ. Ранее мы предоставляем всегда 3 разных выпуска, один для 32-битной Windows, один для 32-разрядной Linux и еще один для 64-разрядной Linux, с установщиком, в который включен JRE. 64-разрядная версия не использовалась кем-либо еще пару недель назад, и было сообщено об OutOfMemoryException, поскольку приложение потребляет на 40-50% больше памяти, чем 32-разрядная версия.32-разрядное или 64-разрядное приложение на 64-битной ОС?

Вопрос в том, нужен ли нам вообще для 64-разрядной версии 64-разрядной версии Linux, если приложению никогда не понадобится использовать более 4 ГБ памяти? У нас был быстрый тест, который показал, что 32-разрядная версия работает и на 64-разрядной Linux. Но я не уверен, какие могли бы быть минусы, которые у нас были бы, например. производительности и/или совместимости?

+0

Позвольте мне пояснить это немного: 32-разрядная версия использует 128 Мбайт как максимальная память, для 64-битной версии может потребоваться 192 МБ, поэтому нам нужно не только создавать дополнительные 64-битные инсталляторы, но и создавать разные конфигурации, что усложняет задачу. И если мы используем 192 МБ для всех версий, это может сделать утечки памяти не столь заметными для нас, потому что 32-битная версия наиболее часто используется к настоящему времени. Еще одна вещь: многие приложения могут работать на этом сервере, поэтому мы хотели бы сократить потребление памяти как можно ниже. –

+0

Это не потребует больше памяти, если вы используете 32-битные ссылки в 64-разрядной JVM. –

ответ

3

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

Однако большинство, если не вся новая система, основаны на архитектуре x64, где я выступаю за то, чтобы также 64-разрядное программное обеспечение было естественным дефолтом. Это становится все сильнее, чем ближе к аппаратной части. Я не могу сказать вам, как это сделать, чтобы запустить виртуальную работу только для поддержки 32-битного VPN-клиента.

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

2

Большинство 32-разрядных JVM, ограничены около 1,2-1,5 Гб.

Если вы обнаружите, что ваше приложение использует гораздо больше памяти с 64-разрядной JVM, попробуйте -XX:+UseCompressedOops, который сообщает 64-разрядной JVM использовать 32-битные ссылки, но все же может получить доступ к 32 ГБ памяти.

1

Мой вопрос в том, нужно ли нам вообще предоставлять 64-разрядную версию для 64-разрядной Linux, если приложению никогда не понадобится использовать более 4 ГБ памяти?

Если приложению не потребуется столько памяти, 64-разрядный установщик/JVM не добавляет значения. Напротив, это плохой вариант, потому что (как вы заметили) он просто использует больше памяти и (возможно) работает медленнее в результате.

(На самом деле, реальный предел будет меньше 4 Гбайта. Некоторые части 32-битного адресного пространства будут непригодными для использования из-за аппаратные проблемы архитектуры.)

Я предлагаю вам снять 64 битную версию, но предоставить пользователю возможность использования JVM, которую они загрузили и установили отдельно. (Действительно, вы, вероятно, должны делать последнее в любом случае. Встроенные копии JRE имеют тенденцию упускаться из виду, когда люди обновляются, чтобы получить последние исправления безопасности JVM ...)