@ideas4ru

Проблемы с памятью в Java?

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


rows и cols равны по 84.

writeLog(&quot;total &quot; + Runtime.getRuntime().totalMemory() + &quot; max &quot; + Runtime.getRuntime().maxMemory() + &quot; free &quot; + Runtime.getRuntime().freeMemory());<br/>
<br/>
costMatrix = new byte[rows][cols][rows][cols];<br/>
writeLog(&quot;costMatrix allocated&quot;);<br/>
<br/>
writeLog(&quot;total &quot; + Runtime.getRuntime().totalMemory() + &quot; max &quot; + Runtime.getRuntime().maxMemory() + &quot; free &quot; + Runtime.getRuntime().freeMemory());<br/>
<br/>
directionMatrix = new Aim[rows][cols][rows][cols];<br/>
writeLog(&quot;directionMatrix allocated&quot;);<br/>
<br/>



Результат


total 16318464 max 259522560 free 15968416

costMatrix allocated

total 73519104 max 259522560 free 13535792


1. Во-первых очень странные цифры 16 против 73 Мбайт занятой памяти, но свободная практически не изменилась.

2. directionMatrix allocated не появляется в логе. Пробовал ловить исключение, но не ловится.


PS Добавлял опции -Xms2g -Xmx2g для виртуальной машины, но все равно не помогает.


Буду благодарен любой информации по теме. В Яве новичок.
  • Вопрос задан
  • 3366 просмотров
Пригласить эксперта
Ответы на вопрос 2
@1nd1go
Есть такой тул jvisualvm, он лежит в $java_home$/bin.

Позволяет помониторить как именно выделяется память. Подробная инструкция к нему есть а сайте оракла, гуглится по visualvm.
Ответ написан
Комментировать
anmipo
@anmipo
1. Что собой представляет класс Aim? Если каждый экземпляр занимает больше ~40 байт, неудивительно, что массив на 84^4 элементов не помещается в 2 ГБ.
2. Какое исключение Вы пробовали ловить? OutOfMemoryException (которое бывает по разным причинам) не является потомком java.lang.Exception.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы