2017-02-21 63 views
0

Я искал утечки памяти в приложении Java, а когда начал приложение и ничего не делал, я заметил, что потребление памяти имеет линейное увеличение на 1 МБ за 5 секунд при мониторинге через jvisualvm или JConsole. Память освобождается при форсировании gc с использованием jvisualvm/jconsole. Затем я попробовал очень простой основной метод, просто запустив цикл, который ждет текущий поток, и все еще может наблюдать потребление линейной памяти. Я проверил с java 8 b121.java jvisualvm/jconsole имеет потребление линейной памяти

Ожидает ли это потребления памяти?

+0

В цикле вы создаете новые большие объекты? – DNAj

ответ

1

Да, это ожидаемо. Когда вы подключаете профилировщик к приложению, ему нужна память. Профилировщик не может магически работать без использования каких-либо ресурсов, поэтому вы получаете отличительный рисунок пильного диска, даже если профилированная программа ничего не делает.

+0

да конечно, но 1MB/5sec? –

+1

Ну, как много вы думаете, что это должно быть? – Kayaman

+0

не уверен, почему потребление должно быть линейным, я ожидал бы, что он будет принимать постоянную сумму за «то, что ему нужно» на профайлер/подключение мониторинга ... знаете ли вы какие-либо технические документы, которые описывают, какие накладные расходы следует ожидать при мониторинге процесса jvm используя jvisualvm/jconsole? –