Подтвердить что ты не робот

"Недостаточная память для Java Runtime Environment" в 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 и имею около 20 гб свободного дискового пространства на своем C-диске.

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

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

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

enter image description here

Параметры памяти в файле "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 устранила проблему.

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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. превращается в нечестивую рубинскую машину Голдберга. Bluehost как услуга находится на спаде.

Ответ 3

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

-Xmx1024m

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

Ответ 4

Попробуйте изменить 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

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

Если вы находитесь на ec2 и хотите выполнить сборку mvn, используйте параметр -T, который сообщает maven использовать количество потоков при выполнении сборки

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

Ответ 8

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

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