Увеличение максимального размера кучи JVM для приложений, интенсивно использующих память - PullRequest
83 голосов
/ 13 июня 2010

Мне нужно запустить приложение с интенсивным использованием памяти Java, которое использует более 2 ГБ, но у меня возникают проблемы с увеличением максимального размера кучи.До сих пор я пробовал следующие подходы:

  • Установка параметра -Xmx, например -Xmx3000m.Этот подход терпит неудачу при создании JVM.Из того, что я гуглил, похоже, что -Xmx должно быть меньше 2 ГБ.

  • Использование опции -XX: + AggressiveHeap .Когда я пробую этот подход, я получаю ошибку «Недостаточно памяти», которая говорит о том, что размер кучи составляет 1273,4 МБ, даже если на моем компьютере 8 ГБ памяти.

Есть ли другой подход, которыйЯ могу попытаться увеличить максимальный размер кучи JVM?Вот краткое описание характеристик компьютера:

  • ОС: Windows 7 (64-разрядная)
  • Процессор: Intel Core i7 (2,66 ГГц)
  • Память: 8 ГБ
  • Java-версия:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

Ответы [ 6 ]

90 голосов
/ 18 июня 2010

Когда вы используете JVM в 32-битном режиме, максимальный размер кучи, который может быть выделен, составляет 1280 МБ.Таким образом, если вы хотите выйти за пределы этого, вам нужно вызвать JVM в 64-режиме.

Вы можете использовать следующее:

$ java -d64 -Xms512m -Xmx4g HelloWorld

где,

  • -d64: включит 64-разрядную JVM
  • -Xms512m: установит начальный размер кучи как 512 МБ
  • -Xmx4g: установит максимальный размер кучи как 4 ГБ

Вы можете настроить -Xms и -Xmx в соответствии с вашими требованиями (YMMV) * ​​1016 *

Очень хороший ресурс по настройке производительности JVM, который может потребоваться изучить: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

45 голосов
/ 13 июня 2010

Получите 64-битную JVM от Oracle .

14 голосов
/ 13 июня 2010

Я считаю, что ограничение 2 ГБ для 32-битной Java. Я думал, что v1.6 всегда был 64-битным, но попробуйте форсировать 64-битный режим, чтобы посмотреть: добавьте опцию -d64.

8 голосов
/ 22 июля 2013

32-разрядная версия Java ограничена приблизительно 1,4–1,6 ГБ.

Часто задаваемые вопросы о 32-разрядной куче Oracle

Цитата

Максимальный теоретический предел кучи для 32-разрядной JVM составляет 4G.Из-за различных дополнительных ограничений, таких как доступный обмен, использование адресного пространства ядра, фрагментация памяти и издержки на виртуальные машины, на практике этот предел может быть намного ниже.В большинстве современных 32-разрядных систем Windows максимальный размер кучи будет варьироваться от 1,4 ГГ до 1,6 ГБ.В 32-битных ядрах Solaris адресное пространство ограничено 2G.В 64-разрядных операционных системах, работающих под управлением 32-разрядной виртуальной машины, максимальный размер кучи может быть выше, приближаясь к 4G во многих системах Solaris.

3 голосов
/ 21 апреля 2015

Ниже у меня работает конф:

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH
export PATH
export JAVA_HOME

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server"

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"
0 голосов
/ 04 декабря 2018

У меня "похожие" проблемы с памятью для анализа 400-мегабайтного файла JSON через узел JSONReader.

Я увеличил -Xmx12228m в knime.ini, но пространство кучи, похоже, ограничено 5462mb

enter image description here

мой ноутбук имеет 16 ГБ оперативной памяти, так что этого должно быть достаточно, верно?

-> сведения об установке: knime_3.6.2 \ plugins / org.knime.binary.jre.win32.x86_64_1.8.0.152-01 / jre / bin \ server \ jvm.dll

Thx

H

...