У нас есть приложение Java, которое очень велико и требует слишком много памяти, хотя я устанавливаю начальную и максимальную память с помощью флагов Xm
, но иногда он замерзает, и мы получаем OutOfMemoryError
через 1-2 минуты (если нам повезет).
Если это произойдет, нам необходимо перезапустить приложение.
Мы запускаем программу с помощью собственного приложения c, которое просто запускает командную строку.
Xmx
?Что делать, если я не устанавливаю флаг Xmx?
Затем JVM по умолчанию использует (как правило, скромный) размер памяти для приложения.
Означает ли это неограниченное использование памяти?
Нет.
Как я могу понять, заморожено ли приложение на C или Java?
Устранение утечки памяти 1.
Обратите внимание, что в вопросе, который я ответил, использовался "выпуск", а не "реализовать". После тщательного рассмотрения, я чувствую, что ответ должен оставаться таким же. Либо "освобождение (память)", либо "реализация (есть проблема)" не будет действительно устранять проблему. Лучше всего решить проблему (утечка памяти).
Как в сторону. Я не думаю, что проблема в коде C, но простой тест (запуск приложения из командной строки) должен проявляться в любом случае. Причина, по которой я думаю, что проблема в коде Java, заключается в том, что OutOfMemoryError
обнаруживается (предположительно) полностью функциональным JVM.
Если приложение C. использовал пространство памяти, зарезервированное JVM для себя или приложения. Я предполагаю, что ошибка была бы совсем другой, возможно, в соответствии с JVM internal error..
Среди других участников был целый ряд хороших советов, которые я буду пересматривать здесь.
close()
все: Запуск приложения с использованием собственного кода C не означает, что вы можете управлять всем использованием памяти параметрами JVM. Попробуйте запустить мониторинг памяти для вашей системы (например, TOP на Linux со сдвигом + m для сортировки памяти) или еще лучше профилировать ваше приложение для памяти.
Попытайтесь получить дамп памяти после запуска приложения (есть некоторые инструменты для профилирования, большинство IDE также предоставляют некоторую функцию), чтобы проверить ваши Java-объекты.