Увеличьте размер кучи в Java


276

Я работаю на сервере Windows 2003 (64-разрядной) с 8 ГБ оперативной памяти. Как я могу увеличить максимум кучи памяти? Я использую -Xmx1500mфлаг, чтобы увеличить размер кучи до 1500 Мб. Можно ли увеличить объем кучи до 75% физической памяти (6 ГБ кучи)?


2
Ты пробовал -Xmx6g? Это не сработало? Что вы наблюдали?
oxbow_lakes

2
Я полагаю, вы пытались увеличить кучу, но не смогли? Вы используете 64-битную JVM?
Барт Киерс

Спасибо за комментарий, но это не работает
Sunil

Ну - откуда ты знаешь, что это не работает? JVM не запускается?
oxbow_lakes

Ответы:


327

Вы можете увеличить до 4 ГБ в 32-битной системе. Если вы работаете в 64-битной системе, вы можете пойти выше. Не нужно беспокоиться, если вы выбрали неправильно, если вы попросите 5g в 32-битной системе, Java будет жаловаться на неверное значение и выйти.

Как уже сообщали другие, используйте флаги cmd-line - например,

java -Xmx6g myprogram

Вы можете получить полный список (или почти полный список), набрав java -X.


16
По моему опыту, фактический размер кучи, который Java будет принимать с использованием 32-битной виртуальной машины (в 32-битной или 64-битной системе - здесь важна виртуальная машина), составляет около 2 ГБ. Кроме того, удивленный аскер не стал сначала искать и находить: stackoverflow.com/questions/1596009/… и: stackoverflow.com/questions/37335/…
wsorenson

2
ах, конечно, вы правы - в 32-битной системе вы можете использовать только 2 Гб памяти.
Стив Б.

Необходимо ли, чтобы максимальная куча и минимальный размер кучи были одинаковыми?
user1747935

1
Нет. Но люди обычно делают это, потому что JVM никогда не может тратить время на изменение размеров. Сомневаюсь, что это имеет большое значение, ТБХ.
Стив Б.

1
@PhilipRego вы устанавливаете его на то, что вы хотите, вплоть до ограничений, которые JVM может адресовать. -Xmx2G устанавливает вашу память на 2G (также посмотрите на -Xms). Это ничего не говорит о том, сколько памяти вам понадобится.
Стив Б.

155

Можно увеличить размер кучи, выделенной JVM, используя параметры командной строки. Здесь у нас есть 3 варианта

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

В приведенной выше строке мы можем установить минимальную кучу до 16 МБ и максимальную кучу 64 МБ


28

На 32-разрядной JVM теоретически можно установить самый большой размер кучи - 4 ГБ. Чтобы использовать больший размер кучи, вам нужно использовать 64-битную JVM. Попробуйте следующее:

java -Xmx6144M -d64

Флаг -d64 важен, поскольку он указывает JVM работать в 64-битном режиме.


Спасибо, босс, но он не работает в моей системе, но кое-что еще мне не хватает
Sunil

4
Определить «не работает». Не запускается ли и выдает ошибку? Он запускается, но использует другой размер кучи?
Кевин

11

Можно увеличить размер кучи, выделенной JVM в Eclipse напрямую. В Eclipse IDE goto

Выполнить ----> Выполнить настройки ----> Аргументы

Введите -Xmx1g (используется для установки максимального размера, например, Xmx256m или Xmx1g ...... m -> mb g ---> gb)


3
Просто добавить это должен быть аргумент VM (eclipse дает вам два варианта).
Мэтт Бойл,

11

java -d64 -Xms512m -Xmx4g HelloWorld

где, -d64: включит 64-разрядную JVM -Xms512m: установит начальный размер кучи как 512 МБ -Xmx4g: установит максимальный размер кучи как 4 ГБ (здесь имя файла java: HelloWorld.java)


9

Вы можете увеличить размер кучи, передавая параметры виртуальной машины Java -Xms и -Xmx , как показано ниже:

Для файлов Jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Для файлов Java:

 java -Xms4096M -Xmx6144M ClassName

Приведенные выше параметры увеличивают InitialHeapSize (-Xms) до 4 ГБ (4096 МБ) и MaxHeapSize (-Xmx) к 6GB (6144 MB).

Но размер кучи молодого поколения останется прежним, а дополнительный размер кучи будет добавлен к размеру кучи старого поколения . Чтобы выровнять размер Young Gen Heap и Old Gen Heap , используйте -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Размер кучи старого поколения: Размер кучи молодого поколения (Вы можете играть с этим соотношением, чтобы получить желаемое соотношение).


7

Можно ли увеличить кучную память до 75% физической памяти (6 Гб кучи).

Да, ты можешь. На самом деле, вы можете увеличить объем физической памяти, если хотите.

Хорошая идея сделать это зависит от того, сколько еще работает в вашей системе. В частности, если «рабочий набор» приложений и служб, которые в настоящее время работают, значительно превышает доступную физическую память, ваша система может «зависнуть», тратя много времени на перемещение страниц виртуальной памяти на диск и с него. Чистый эффект состоит в том, что система становится ужасно медленной.


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

Попробуйте -Xmx6000m. Это должно работать, если вы используете 64-битную версию Java.
Стивен С

3
Вы уверены, что используете 64-битную версию Java? На 64-битной операционной системе?
Стивен С

4

Пожалуйста, используйте команду ниже, чтобы изменить размер кучи на 6 ГБ

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

Если в моей системе есть память 8G, и из диспетчера задач видно, что 70% ее используется; Можно ли выделить 6G памяти для размера кучи Java?
Reihan_amn

1
@Reihan_amn Да и нет, если вы превысите свою память, она перейдет на пейджинг, который находится на диске и невероятно медленный. Если вы превысите файлы подкачки, значит, у вас плохое время.
CodeMonkey

2

Несколько человек указали конкретные ответы для размера кучи с помощью параметров jvm -Xmsи -Xms. Я хочу отметить, что это не единственный тип памяти для jvm. В частности, если вы получаете стек поверх потоков, то вам нужно увеличить размер стека, добавив дополнительную опцию, например -Xss8m.

Для этой проблемы варианты jvm чего-то подобного -Xms2g -Xmx6g -Xss8mбыли бы решением.

Я делюсь этой информацией, так как мои поиски в Google о том, как увеличить память jvm, привели меня к этому решению, и решения не работали с большим объемом выделения памяти. После того, как я выяснил, для чего нужны конкретные настройки, я смог найти в Google, как увеличить размер стека, и нашел пропущенный параметр. :) Надеюсь, что это экономит время других, как это сэкономило бы мне массу времени. :)


2

Это работает только с 64-битной версией Java. Перейдите в Панель управления и нажмите значок Java. В небольшом окне панели управления Java нажмите на строку меню Java, а затем нажмите viewкнопку.

Если у вас есть две платформы Java, отключите предыдущую версию Java, затем щелкните текстовое поле параметров времени выполнения и напишите -Xmx1024mили меньше размера ОЗУ. Не увеличивайте размер кучи, равный RAM, иначе ваша система потерпит крах.


Если вы сделаете размер кучи равным RAM, система не будет зависать. Вместо этого система начнет пейджинг и будет работать медленно и медленно.
DaveTheMinion

0

Да. Ты можешь.

Вы можете увеличить объем памяти кучи до 75% физической памяти (кучи 6 ГБ) или выше.

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

$ java -Xms512m -Xmx6144m JavaApplication

Устанавливает начальный размер кучи в 512 МБ и максимальный размер кучи в 6 ГБ.

Надеюсь, поможет.. :)


Это кажется очень похожим на два наиболее популярных ответа, опубликованных несколькими годами ранее.
Бернхард Баркер

0

У меня проблема с запуском py-файлов в моем java-коде с использованием eclipse / STS, получая PyException из-за недостатка памяти кучи jvm. Я внес изменения, указанные ниже, и смог решить эту проблему. Ниже моя конфигурация системы.

введите описание изображения здесь

И это те изменения, которые я сделал в своем рабочем пространстве, и теперь он работает идеально.

введите описание изображения здесь введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.