Збільшити розмір купи в Java


276

Я працюю на сервері Windows 2003 (64-розрядний) з 8 ГБ оперативної пам’яті. Як я можу збільшити максимум пам'яті купи? Я використовую -Xmx1500mпрапор для збільшення розміру купи до 1500 Мб. Чи можу я збільшити об'єм пам'яті до 75% фізичної пам'яті (6 Гб Heap)?


2
Ви пробували -Xmx6g? Це не спрацювало? Що ви спостерігали?
oxbow_lakes

2
Я припускаю, що ви намагалися збільшити купу, але не вдалося? Ви використовуєте 64-бітний JVM?
Барт Кірс

Дякуємо за коментар, але це не працює
Sunil

Ну - як ти знаєш, що це не працює? Не починається JVM?
oxbow_lakes

Відповіді:


327

Ви можете збільшити до 4 Гб в 32-бітній системі. Якщо ви маєте 64-бітну систему, ви можете піднятися вище. Не потрібно турбуватися, якщо ви вибрали неправильно, якщо ви попросите 5 г 32-бітної системи, Java поскаржиться на недійсне значення і вийде з ладу.

Як опублікували інші, використовуйте прапори cmd-line - наприклад

java -Xmx6g myprogram

Ви можете отримати повний список (або майже повний список, все одно), ввівши java -X.


16
Я мав досвід, що фактичний розмір купи Java прийме за допомогою 32b VM (для системи 32b або 64b - тут важлива частина VM), приблизно 2G. Крім того , здивований Аскер не перший пошук і знайти: stackoverflow.com/questions/1596009 / ... і: stackoverflow.com/questions/37335 / ...
wsorenson

2
ах, ти, звичайно, маєш рацію - в 32-бітовій системі ви можете адресувати лише 2 Гб пам'яті.
Стів Б.

Чи потрібно, щоб максимальна купа і мінімальний розмір купи були однаковими?
користувач1747935

1
Ні. Але зазвичай люди це роблять, тому що СП не може витрачати час на зменшення розміру. Сумніваєтесь, що це має велике значення, TBH.
Стів Б.

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 в затемненні, безпосередньо в затемненому IDE goto

Виконати ----> Запустити конфігурації ----> Аргументи

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


3
Просто для додання це має бути аргумент VM (затемнення дає два варіанти).
Метт Бойл

11

java -d64 -Xms512m -Xmx4g HelloWorld

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


9

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

Для файлів Jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Для файлів Java:

 java -Xms4096M -Xmx6144M ClassName

Вищезазначені параметри збільшують InitialHeapSize (-Xms) до 4 Гб (4096 МБ) і MaxHeapSize (-Xmx) до 6 ГБ (6144 МБ).

Але розмір накопичувача молодого покоління залишиться колишнім, а додатковий розмір HeapSize буде доданий до розміру маси старого покоління . Для вирівнювання розмірів Young Gen Heap та Old Gen Heap використовуйте -XX: NewRatio = 1 -XX: -UseAdaptiveSizePolicy парами .

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

-XX: NewRatio = Старий розмір генового набору: Young Gen HeapSize (Ви можете грати з цим співвідношенням, щоб отримати бажане співвідношення).


7

Чи можу я збільшити об'єм пам'яті до 75% фізичної пам'яті (6 Гб Heap).

Так, ти можеш. Насправді ви можете збільшити більше, ніж обсяг фізичної пам'яті, якщо хочете.

Від того, чи варто це робити, залежить від того, скільки ще працює у вашій системі. Зокрема, якщо "робочий набір" додатків і служб, які зараз працюють, значно перевищує наявну фізичну пам'ять, ваша система підлягає "треші", витрачаючи багато часу на переміщення сторінок віртуальної пам'яті на диск і з нього. Чистий ефект полягає в тому, що система стає жахливо повільною.


Дякуємо за ваш коментар Але як я можу збільшити. Можливо, ви можете дати команду.
Суніль

Спробуйте -Xmx6000m. Це повинно працювати, якщо ви використовуєте 64-бітну версію Java.
Стівен С

3
Ви впевнені, що у вас працює 64-бітна версія Java? На 64-бітній операційній системі?
Стівен C

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або менше розміру ОЗУ. Не збільшуйте розмір купи, рівний ОЗУ, інакше ваша система вийде з ладу.


Якщо зробити розмір купи рівним ОЗУ, система не вийде з ладу. Натомість система почне пейджинговий вигляд та стане приємною та повільною.
DaveTheMinion

0

Так. Ти можеш.

Ви можете збільшити об'єм пам’яті до 75% фізичної пам’яті (6 Гб Heap) або вище.

Оскільки ви використовуєте 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.