Я столкнулся с печально известной OutOfMemoryException в своем приложении, и вместо простого увеличения доступного пространства кучи я попытался выяснить, в чем проблема, на всякий случай произошла какая-то утечка из мое заявление.
Я добавил параметр JVM -XX: + HeapDumpOnOutOfMemoryError , который создает дамп кучи при возникновении ошибки OutOfMemory. Затем я проанализировал файл дампа, созданный различными инструментами профилирования. Затем я начал играть с параметром -Xmx и шаблонами наблюдений.
Что меня озадачило, так это следующее. Почему при анализе дампа я обнаружил, что общий размер всех объектов был намного меньше, чем тот, который я установил с помощью параметра -Xmx?
Например, скажем, я установил -Xmx на «2048m». Когда я проанализировал файл дампа, я обнаружил в куче 400 МБ объектов. Я ожидал найти 2 ГБ. Я что-то пропустил?