2013-08-25 2 views
4

Если я запустил приложение GWT в eclipse в режиме разработки и некоторое время нахожусь в браузере, я всегда получаю ошибку «вне памяти» в eclipse. Мой компьютер имеет 16 ГБ памяти, и никогда не используется более 8 ГБ.Eclipse + GWT -> Недостаточно памяти в режиме разработки

Я попробовал несколько параметров конфигурации. VM-аргументы в моей Run конфигурации содержат следующие параметры: «-Xms8192m -Xmx8192m»

Даже в eclipse.ini я проверил несколько параметров конфигурации, и теперь он выглядит следующим образом:

--launcher.XXMaxPermSize 
8192M 
-showsplash 
org.eclipse.platform 
--launcher.XXMaxPermSize 
8192m 
--launcher.defaultAction 
openFile 
--launcher.appendVmargs 
-vmargs 
-Dosgi.requiredJavaVersion=1.6 
-Xms8192m 
-Xmx8192m 

Но я до сих пор получить ошибку. Есть ли способ предотвратить это?

+2

Похоже, что у вас есть утечка памяти в вашем приложении. Найдите некоторую структуру (скорее всего, «Коллекция»), откуда вы добавляете объекты и никогда не удаляете их. Используйте профилировщик, чтобы узнать, в чем используется ваша память. – SJuan76

+0

использовать jvisualvm, чтобы проверить, сколько памяти вы используете, должно быть что-то здесь: C: \ Program Files \ Java \ jdk1.7.0_05 \ bin \ jvisualvm.exe – Paniz

+0

У вас есть стек? – Katona

ответ

6

Если приложение браузера выбрасывает OutOfMemoryError, вам не нужно изменять настройки Eclipse (eclipse.ini), это только для самого Eclipse (больше памяти, обычно быстрее рабочего места).

Чтобы увеличить память о приложении (любое приложение Java, запущенном из Eclipse), перейдите к Run/Debug configurations... в меню Run и установите VM arguments на вкладке Arguments в перспективе конфигурации в приложении:

-Xms128M -Xmx1024M -XX:MaxPermSize=256M 
1

положить это в параметры виртуальной машины в пробежки конфигурациях: -Xmx2048M -XX: MaxPermSize = 512m

0

Если я запускаю мое приложение GWT в затмении в режиме разработки и нажмите вокруг в браузере некоторое время, я всегда получаю «из памяти "в eclipse.

Не совсем уверен, в чем проблема, но я вижу некоторые проблемы с вашими текущими аргументами.

  1. У вас есть два активатора, которые являются одинаковыми. Вам не нужно 2-й въезд:

    --launcher.XXMaxPermSize 
    8192M 
    
  2. Я действительно сомнения, что вы хотите 8g из PermSize. Что-то вроде 512m, вероятно, намного лучше. Вы можете использовать jconsole, чтобы узнать, сколько памяти находится в вещественном пространстве. В приведенном ниже изображении, взятом из вкладки памяти jconsole, панель, выделенная в правом нижнем углу, показывает пространство «Perm Gen». Сейчас он использует 26 906 КБ (или около 27 МБ). Вот где код идет, и его часто нужно увеличивать, если у вас много страниц JSP, которые тоже скомпилируются.

    enter image description here

    Если вы запустите приложение со следующими Params вы должны быть в состоянии соединиться с JConsole, чтобы увидеть, как это делает:

    -Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.authenticate=false 
    

    Я подозреваю, что вы будете видеть, что вы используя далеко, гораздо меньше в пространстве «Пермского генерала». -Xmx8192m (или -Xmx8g) - это все, что вам нужно. Это даст 8 гб памяти для кучи вообще, которая обычно является короткоживущими объектами. Он также масштабирует различные разделы памяти соответственно.

Для получения дополнительной информации о различных пространствах кучи см. Java hotspot documentation.

Смежные вопросы