Возьмите кучу кучи и выясните, какие предметы удерживают их. Как только вы знаете, какие объекты хранят массивы, вам нужно иметь легкую идею времени, чтобы выяснить, что их выделяет.
Это не ответ на ваш вопрос, но мой вопрос:
Почему вы заботитесь?
Вы сказали, что сборщик мусора jvm (GC) может использовать до 1 ГБ памяти. Java использует менее 250M.
GC пытается быть умным, когда собирает мусор, а также, как сильно он работает при сборке мусора. На вашем графике нет потребности в памяти. Jvm не находится рядом с установленным пределом 1 ГБ. Я не вижу причин, по которым GC должен очень стараться. Не уверен, почему вам тоже будет интересно.
Его хорошая вещь для сборщика мусора, чтобы быть ленивым. Чем меньше работает GC, тем больше ресурсов доступно для вашего приложения.
Вы пробовали запускать GC через кнопку JVisualVM «Выполнить GC»? Эта кнопка должна инициировать операцию по сборке мусора «остановить мир». Попробуйте, когда график находится посередине одного из этих скачков зубьев пилы - я предсказываю, что использование упадет на основание пилы или ниже. Если это так, это доказывает, что зуб за память - это просто накопление мусора, и GC делает все правильно.
Вот скриншот использования памяти для приложения Java Swing, я использую:
Уведомления пилообразного узора.
Вы сказали, что беспокоитесь о int []. Когда я начинаю профайлер памяти и иметь его профиль все, что я могу видеть распределения ИНТ []
В основном все распределения приходят от метода ObjectOutputStream $ HandleTable.growEntries. Похоже, что поток, на который были сделаны выделения, был развернут для обработки сетевого сообщения.
Я подозреваю, что это вызвано самой jmx. Возможно, rmi (вы используете rmi?). Или отладчик (у вас есть отладчик подключен?).
Примите во внимание, что, хотя у вас буквально нет 'new int []', вы все равно можете выделить их самостоятельно. Массив теоретически - единственное, что можно выделить в Java. –
@MarkoTopolnik Да, будучи сетевым сервером, у меня есть некоторый 'byte []', вокруг которого я могу учитывать. Его большой временный 'int []', который мне интересен, хотя я понимаю, что они будут исправлены, как только появится GC; они могут вызывать GC более часто, чем хотелось бы, но, похоже, они, похоже, не влияют на сервер. Мне просто интересно, как вы собираетесь отлаживать его. – Will
[Эта ссылка] (http://stackoverflow.com/a/12017652/1103872) должна помочь. –