Сообщение "недостаточно памяти для среды выполнения Java" в eclipse

Когда я запускаю свой Java-код в Eclipse, я получаю следующее сообщение:

There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (malloc) failed to allocate 4088 bytes for AllocateHeap
An error report file with more information is saved as:
E:\Eclipse_Workspace\BTest\hs_err_pid1888.log

У меня 4 ГБ оперативной памяти на моем компьютере. Я изменил свой JRE с 1,7 до 1,8 тоже. Но проблема кажется нерешенной. Я использую систему Win 8 с процессором i3 и у меня на диске C около 20 ГБ свободного дискового пространства.

Версия Eclipse: Eclipse Juno Service, выпуск 2

Я также получаю это сообщение при запуске Eclipse. Я прикрепил снимок экрана с сообщением об ошибке.

Что вызывает эту проблему?

Параметры памяти в файле "eclipse.ini":

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms40m
-Xmx512m

Решение: переустановка Eclipse устранила проблему.

12 ответов

Приведенное выше сообщение означает, что на вашем компьютере запущено так много программ, что не осталось памяти для запуска еще одной. Это не проблема Java, и никакая опция Java не изменит это.

Используйте диспетчер задач Windows, чтобы увидеть, сколько из вашей оперативной памяти 4 ГБ фактически свободно. Я предполагаю, что где-то у вас есть программа, которая съедает всю память. Найди и убей это.

РЕДАКТИРОВАТЬ Вы должны понимать, что существует два типа ошибок "недостаточно памяти".

Первое - это OutOfMemoryException, которое вы получаете, когда код Java работает, а куча Java недостаточно велика. Это означает, что Java- код запрашивает у Java времени выполнения память. Вы можете исправить это с -Xmx...

Другая ошибка - это когда во время выполнения Java не хватает памяти. Это вообще не связано с кучей Java. Это ошибка, когда Java запрашивает у ОС больше памяти, а ОС говорит: "Извините, у меня ее нет".

Чтобы исправить последнее, закройте приложения или перезагрузите компьютер (чтобы очистить фрагментацию памяти).

Как диагностировать эту ошибку даже при запуске простой команды:

java -version
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# /home2/ericlesc/code/java/c2/hs_err_pid23944.log

Проверьте количество свободной памяти у вас есть:

free -m
             total       used       free     shared    buffers     cached
Mem:         28119      26643       1475        189       2391      15368
-/+ buffers/cache:       8884      19235
Swap:         5117         34       5083

Проверьте максимальное количество пользовательских процессов, убедитесь, что вы не превышаете лимит:

ulimit -a

ps -ef | wc -l

Для меня причина этого состояла в том, что PHP использовал слишком много памяти, выделенной мне на bluehost, и способ, которым я смог это исправить, без перезапуска PHP или сервера (я не могу) состоял в том, чтобы взять public_html каталог и переименуйте его. И дайте PHP время, чтобы увидеть изменения, а затем переименуйте их обратно.

Ошибка в самом движке php. Я нашел умный способ быстро запустить движок PHP.

(обновление от февраля 2016 г.) (Я получаю всплеск голосов за это, потому что движки PHP экземпляра Bluehost резервируют всю память и не оставляют ни одной для JVM. В свою защиту PHP превращается в нечестивую машину Рубберга Голдберга. Bluehost как услуга находится на спаде.

Исправить довольно просто, я не уверен, почему никто не упомянул фактическое рабочее решение. Во-первых, установите переменные среды в свою систему, а во-вторых отключите брандмауэр или антивирус для Android Studio и Java VM. Это определенно решит вашу проблему.

      Starting Gradle Daemon...
Gradle Daemon started in 4 s 291 ms
Starting Gradle Daemon...
Gradle Daemon started in 5 s 664 ms
Starting Gradle Daemon...
Gradle Daemon started in 2 s 210 ms
Starting Gradle Daemon...
Gradle Daemon started in 7 s 258 ms

Если вы используете виртуальную машину (ВМ), выделите больше ОЗУ для вашей ВМ, и ваша проблема будет решена.

Если вы используете ec2 и хотите выполнить сборку mvn, используйте опцию -T, которая указывает maven использовать количество потоков при сборке.

например:mvn -T 10 clean package

Попробуйте изменить ваш eclipse.ini с помощью ниже

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms2G
-Xmx3G
-XX:MaxPermSize=2G
-XX:+UseCompressedOops
-XX:+UseParallelGC

Как только вы откроете свое затмение, вы можете попробовать ниже

Похоже, ваше приложение потребляет больше памяти, чем выделено (по умолчанию). Я попробую две вещи

  1. По предложению Harmlezz, увеличьте выделение памяти для JVM до -Xms2g -Xmx2g (при необходимости увеличьте его и попробуйте)

  2. Загрузите анализатор памяти eclipse и проверьте, что вызывает утечку памяти, ИЛИ даже вы можете использовать JConsole, чтобы увидеть использование памяти JVM, чтобы выяснить проблему утечки памяти приложения.

В вашем Eclipse установочный каталог, вы должны быть в состоянии найти файл eclipse.ini, Откройте его и найдите -vmargs раздел. Отрегулируйте значение:

-Xmx1024m

В этом примере это установлено на 1 ГБ.

В моем случае это было то, что я вручную установил слишком низкий объем виртуальной памяти Windows, чтобы сэкономить место на системном SSD.

Вы должны диагностировать использование jvm, например, сколько процессов запущено и как насчет выделения кучи. существует множество способов сделать это, например

  • Вы можете использовать java jcmd для проверки количества объектов, размера памяти (для Linux вы можете использовать, например, "/usr/jdk1.8.0_25/bin/jcmd 19628 GC.class_histogram > /tmp/19628_ClassHistogram_1.txt", здесь 19628 - это идентификатор процесса запущенного приложения). Вы можете легко проверить, существует ли в вашем коде какая-либо сильная ссылка.

В моем случае на диске C: не хватило места. Убедитесь, что у вас достаточно свободного места.

Я знаю вопрос, касающийся затмения, но я много раз сталкивался с подобной проблемой с Intellij, и решение было простым... Просто запустите 64-битный exe, а не 32-битный, который всегда используется по умолчанию.

Вашему приложению (Eclipse) требуется больше памяти, а JVM выделяет недостаточно. Вы можете увеличить объем памяти, выделяемый JVM, следуя приведенным здесь ответам.

Другие вопросы по тегам