2013-08-01 2 views
1

Возможно, это наивный вопрос. Я в процессе расследования вероятной утечки памяти в моем приложении. Я отслеживаю процесс tomcat через jvisualvm. В какой-то момент я решил сделать кучу кучи.Почему запуск кучи кучи приводит к значительному сокращению количества потоков?

Я был удивлен, увидев, что мой поток подсчитан, а потребление памяти значительно снизилось после создания кучи кучи. Обратите внимание на следующие снимки экрана.

ThreadsMemory

Почему мой счет нити и снижение памяти только из-за кучи свалка?

[РЕДАКТИРОВАТЬ] В ответ на ответы о том, что он делает полную сборку мусора в ответ на кучу кучи, мой вопрос о последующем будет, не следует ли собирать мусор все время? Я не вижу предварительных драматических спадов, просто регулярных, которые происходят, когда GC происходит нормально. Чем отличается этот цикл GC, чем обычно?

+1

В общем случае полный GC будет запущен перед выполнением сброса кучи, что может привести к снижению количества потоков. – kosa

+0

Мне нравится, когда лучший результат связанного поиска Google - это вопрос SO, который дублируется. –

ответ

2

Перед сбросом, ваша программа была в устойчивом состоянии, состоящий из:

  1. выделения короткоживущих объектов;
  2. незначительный GC, который очищает их все.

В то же время было довольно много недостижимых предметов, которые висели вокруг, принадлежавшие поколению.

Затем вы сделали свалку потока. Эта операция сама по себе потребляет много памяти, и в результате произошла коллекция major. Это уничтожило ваши объекты.

Теперь у этих объектов могли быть запущены финализаторы, или они, возможно, были связаны с некоторыми мягкими ссылками, и в ответ на их сбор/финализацию закончилось несколько потоков.

Это привело к тому, что ваш наклон распределения кучи (байты, выделенные в секунду) стал значительно более плоским.

+0

Спасибо. Хороший ответ, дает мне направление посмотреть. – Bill

1

Свалка кучи может вызывать полный сбор мусора перед записью кучи.

1

Когда вы запускаете кучу кучи, вы также запускаете полную коллекцию. Некоторые из ваших потоков демона могут быть остановлены, когда ресурс без сильной ссылки исчезнет.

Смежные вопросы