Задать вопрос
@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 для виртуальной машины, но все равно не помогает.


Буду благодарен любой информации по теме. В Яве новичок.
  • Вопрос задан
  • 3369 просмотров
Подписаться 2 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • Академия Эдюсон
    Java-разработчик: тариф Базовый
    8 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Java-разработчик + ИИ
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@1nd1go
Есть такой тул jvisualvm, он лежит в $java_home$/bin.

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

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

Похожие вопросы
ITK academy Казань
от 75 000 ₽
ИТРУМ Ростов-на-Дону
от 75 000 ₽
Яндекс Москва
от 180 000 до 350 000 ₽