Разрешение java.lang.OutOfMemoryError: пространство кучи Java - PullRequest
1 голос
/ 28 августа 2011

Как видно из заголовка, я получаю эту ошибку в потоке.

LOCs-нарушитель выглядит следующим образом:

</p>

<pre><code>for (int i = 0; i < objectListSize; i++) {
   logger.INFO("Loop repeat: "+i+" ...", true);
   final Double discreteScore = sp.getDouble(superPeerSocket);
   final int expectedObjectIDs = sp.getInteger(superPeerSocket);
   final String discreteObjects[] = new String[expectedObjectIDs];
   for ( int j = 0; j < expectedObjectIDs; j++)
      discreteObjects[j] = sp.getString(superPeerSocket);
   htPlus.attachInitialDiscreteList2L1(discreteScore, discreteObjects); 
}

В последнем объявлении String discreteObjects [] я получаю сообщение об ошибке.Я запускаю этот код в потоке.У меня есть две темы в настоящее время активны, когда я получаю это.Я также попытался использовать инструмент MAT из Eclipse.Вот ссылка с некоторыми файлами диаграмм внутри: Файлы диаграмм PLC (dropbox URL) Если у кого-то есть идеи по этой проблеме, я был бы признателен.PS: я думаю удалить цикл, хотя он просто не проходит в первом проходе цикла.(Я получаю это в выходных данных, когда программа не работает)

</p>

<pre><code>Expected data size: 10
Repeat: 0 ...
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid3793.hprof ...
Heap dump file created [1404020 bytes in 0.015 secs]
Exception in thread "1" java.lang.OutOfMemoryError: Java heap space
    at planetlab.app.factory.Worker$15.run(Worker.java:796)
    at java.lang.Thread.run(Thread.java:662)

Что-то неуместное:Что с кодом, неправильно отформатированным / предполагаемой ошибкой при создании сообщений в переполнении стека?Мне понадобилось 15 минут, чтобы понять, что делать: @: S: @

1 Ответ

6 голосов
/ 28 августа 2011

Каждая Java-программа запускается в песочнице.Хотя в вашей ОС может быть доступно 10 ГБ ОЗУ, в вашем приложении может быть только 128 МБ.

Необходимо убедиться, что в приложении достаточно памяти ОЗУ, выделенного для JVM, с помощью аргументов -Xms -Xmx.-Xms обозначает минимум, а -Xmx максимум

В комментариях было высказано предположение, что ваши ожидаемые идентификаторы объектов кажутся довольно высокими.Я бы обязательно это проверил.Тем не менее, вы можете использовать следующий код, чтобы получить представление об использовании памяти и доступной памяти.Используя эту информацию, вы можете соответствующим образом настроить -Xms -Xmx.

Удачи!

Runtime runtime = Runtime.getRuntime();  

long maxMemory = runtime.maxMemory();  
long allocatedMemory = runtime.totalMemory();  
long freeMemory = runtime.freeMemory();  

System.out.println("free memory: " + freeMemory / 1024);  
System.out.println("allocated memory: " + allocatedMemory / 1024);  
System.out.println("max memory: " + maxMemory /1024);  
System.out.println("total free memory: " +   
   (freeMemory + (maxMemory - allocatedMemory)) / 1024);   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...