2010-11-02 4 views
2

Я использую 32-разрядный win.7 и используя Eclipse. Также имеется 4 ГБ оперативной памяти.JVM Heapsize на 32-разрядной ОС

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

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

ответ

2

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

-2

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

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

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

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

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

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

+0

Хм, почему? Что-то действительно ** неправильно ** в моем ответе ?? – haylem

+0

Спасибо за ответы ура, я установлю 64-битные win7 и 64-битные JVM на свой компьютер, а затем установит аргументы VM. не просто ~ 3 ГБ, но более 2 ГБ, я работаю над визуализацией графика в больших масштабах. так что я думаю, что на 4GB Ram я дам ~ 2.5GB RAM, как аргумент -Xmx. furrther сообщит вам. может ли кто-нибудь еще предоставить мне аргументы оптимизации в файле eclipse.ini? – Aijaaz

+0

Кроме того, я посетил форумы, где они обсудили различные параметры оптимизации, которые необходимо добавить в файл eclipse.ini. Я бы предпочел, если кто-то предоставит мне консолидированный оптимизированный список pf thise vm arguments. – Aijaaz

-1

У меня сейчас нет ссылки, описывающей процесс управления памятью 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 maximum memory on Windows XP

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

+0

Нет, это ограничение на попытку сжать JVM, кучу Java, кучу JVM, потоки потоков, JAR-файлы с отображением памяти, разделяемые библиотеки и разные сегменты данных в эту часть 32-разрядного адресного пространства, оставшуюся на ОС. – Anon

+0

Это не предел VM, а ограничение ОС. VM для Oracle для Solaris является, например, способный обрабатывать кучи до ~ 3,5 ГБ, поскольку 32-разрядная Solaris позволяет каждому процессу обращаться к 4 ГБ (а не только к 2 ГБ, как к Windows и Linux). – jarnbjo

+0

Я рассмотрел это раньше для размещения веб-приложений. Это как предел JVM, так и операционной системы. Факты состоят в том, что для JVM требуются целые блоки ОЗУ, а YMMV - для того, насколько большой самый большой контингентный блок ОЗУ на вашей машине. –

3

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

Поскольку VM требуется память для большего количества вещей, чем только куча, максимальный размер кучи будет немного меньше максимальной памяти, доступной для процесса. Как правило, вы можете настроить кучу до 1,6 ГБ для 32-битной виртуальной машины Windows.

+1

ПРИМЕЧАНИЕ. В Windows Server 2003 есть переключатель для включения до 3 ГБ (/ 3 ГБ). См. Http://www.microsoft.com/whdc/system/platform/server/pae/paemem.mspx. –

Смежные вопросы