JVM Heapsize на 32-битной ОС

Я использую 32-битную версию win.7 и Eclipse. Также с 4 Гб оперативной памяти.

Я хочу выделить моему java-приложению максимальный размер кучи около 3 ГБ, но я могу выделить максимум 1,5 ГБ с помощью аргументов виртуальной машины -Xmx1056m.

Что я должен делать? Если я установлю 64-битную версию win.7. тогда он сможет выделить 3 ГБ для моего приложения?


person Aijaaz    schedule 02.11.2010    source источник


Ответы (4)



Вам нужна 64-битная ОС и 64-битная виртуальная машина, чтобы выделить столько оперативной памяти.

person Faisal Feroz    schedule 02.11.2010

У меня сейчас нет ссылки, описывающей процесс управления памятью JVM. Ограничение, на которое вы наткнулись, — это ограничение того, как Java выполняет сборку мусора. Куча памяти Java должна быть непрерывным блоком. Алгоритмы сборки мусора были оптимизированы с учетом этого конструктивного ограничения, поэтому они могут работать эффективно. В 32-битной операционной системе вы не можете контролировать, в какие адреса памяти загружаются драйверы устройств. В Windows ОС будет перераспределять базовый адрес драйвера устройства, хранящийся в DLL, только если он конфликтует с уже загруженным кодом. Другие операционные системы могут перераспределять все драйверы устройств при загрузке, чтобы они находились в непрерывном блоке рядом с ядром.

По сути, ограничение одинаково для 64-битных и 32-битных операционных систем. Просто на 64-битной ОС есть еще несколько диапазонов адресов на выбор. Убедитесь, что вы используете 64-битную JVM для соответствия ОС. Вот почему 64-битная ОС может найти больший непрерывный блок адресов памяти, чем 32-битная ОС.

EDIT: Кроме того, 32-битная JVM имеет ограничение максимального размера кучи в 2 ГБ.

ССЫЛКА:

http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.html

Максимальная память Java в Windows XP

http://forums.sun.com/thread.jspa?messageID=2715152#2715152

person Berin Loritsch    schedule 02.11.2010
comment
Нет, это ограничение попытки втиснуть JVM, кучу Java, кучу JVM, стеки потоков, отображаемые в память JAR-файлы, общие библиотеки и различные сегменты данных в ту часть 32-битного адресного пространства, которая осталась ОПЕРАЦИОННЫЕ СИСТЕМЫ. - person Anon; 02.11.2010
comment
Это не предел ВМ, а предел ОС. Виртуальная машина Oracle для Solaris, например. способен обрабатывать кучи до ~ 3,5 ГБ, поскольку 32-разрядная версия Solaris позволяет каждому процессу адресовать 4 ГБ (а не только 2 ГБ, как Windows и Linux). - person jarnbjo; 02.11.2010
comment
Я изучал это раньше для размещения веб-приложений. Это ограничение как JVM, так и операционной системы. Факты таковы, что для JVM требуются смежные блоки ОЗУ, а YMMV определяет, насколько велик самый большой непрерывный блок ОЗУ на вашей машине. - person Berin Loritsch; 02.11.2010
comment
Ссылка на это: stackoverflow.com/questions/171205 / - person Berin Loritsch; 02.11.2010
comment
Сейчас я запускаю Eclipse на 32-битной JVM Sun Java 1.6 (на 32-битной Linux) с основной кучей 2,2 Гб. Ограничение в 2 Гб (общее) — это ограничение, установленное для 32-разрядной Windows. - person Stephen C; 11.06.2011

Вам понадобится не только 64-битная ОС и 64-битная виртуальная машина, но и больше памяти.

В 32-битной системе Windows виртуальное адресное пространство разделено на 2 ГБ для операций ядра и 2 ГБ для пользовательских приложений. Так что ты облажался.

Есть один возможный, но очень маловероятный обходной путь: вы можете включить переключатель /3GB на снять это ограничение и выделить системе 1 ГБ виртуального адресного пространства для операций ядра и 3 ГБ для пользовательских приложений (если они /LORGEADDRESSPACEAWARE).

К сожалению, 32-битная JVM Sun/Oracle HotSpot не является LARGEADDRESSAWARE (насколько я знаю), и другие 32-битные JVM, вероятно, тоже.

Но подумайте об этом: даже если бы вы могли это сделать, вы бы использовали всю доступную для вашей системы память. Ничего не останется для других программ после того, как вы выделите 3 ГБ кучи для своей JVM. Ваша система будет постоянно переключаться на диск. Это было бы непригодно.

Просто установите ОС 64bis с большим объемом оперативной памяти. Это все, что вам нужно, за исключением поиска способов, позволяющих вашей программе использовать меньше памяти.

person haylem    schedule 02.11.2010
comment
Спасибо за ваши ответы, я установлю 64-битную версию Win7 и 64-битную JVM на свой компьютер, а затем установлю аргументы виртуальной машины. не только ~ 3 ГБ оперативной памяти, но и больше 2 ГБ, я работаю над визуализацией графиков в больших масштабах. поэтому я думаю, что на 4 ГБ оперативной памяти я дам ~ 2,5 ГБ оперативной памяти в качестве аргумента -Xmx. дальше дам вам знать. может ли кто-нибудь еще предоставить мне аргументы оптимизации в файле eclipse.ini? - person Aijaaz; 02.11.2010
comment
Кроме того, я посещал форумы, где обсуждались различные параметры оптимизации, которые необходимо добавить в файл eclipse.ini. Я бы предпочел, чтобы кто-нибудь предоставил мне сводный оптимизированный список этих аргументов vm. - person Aijaaz; 02.11.2010
comment
@Aijazz: Вы можете найти этот список здесь, в stackoverflow, уже есть много вопросов по этому поводу. Вы хотите запустить eclipse И ваше приложение, или eclipse было приложением, о котором вы говорили в исходном вопросе? - person haylem; 03.11.2010
comment
@Aijazz: см. здесь настройки eclipse ini: stackoverflow.com/questions/142357/ - person haylem; 03.11.2010
comment
@haylem - да есть. В 32-битной Windows по умолчанию для пользовательских приложений доступно только 2 Гб виртуального адресного пространства; см. en.wikipedia.org/wiki/Virtual_address_space - person Stephen C; 11.06.2011
comment
@Stephen C.: Правда, не совсем так. При установке 32-разрядной версии Microsoft Windows по по умолчанию процессам для собственного использования предоставляется только 2 ГБ. Это ограничение, наложенное самой Windows, а не теоретическое ограничение, и оно снимается с помощью переключателя /3GB. Я удалю или отредактирую этот ответ через несколько дней, так как он явно недостаточно хорош. - person haylem; 13.06.2011