OberonCore
https://forum.oberoncore.ru/

Загадка со сборкой мусора
https://forum.oberoncore.ru/viewtopic.php?f=27&t=1695
Страница 1 из 1

Автор:  Сергей Губанов [ Вторник, 07 Июль, 2009 13:18 ]
Заголовок сообщения:  Загадка со сборкой мусора

Обычно в системе со сборкой мусора используемая память медленно растёт, растёт, растёт, а потом бух и быстро упала (запустился сборщик мусора и всё собрал). Потом опять растёт, растёт, растёт, и бух упала и т.д. На графике использования памяти получается пила с "левым ходом".

Я сейчас в своей программе прикрутил кеширование некоторых часто используемых объектов.

После этого на графике использования памяти получается пила не с "левым", а с "правым ходом" :? :? :?
(память сначала относительно быстро нарастает, а потом меееееедленно уменьшается), странно...

Автор:  Валерий Лаптев [ Вторник, 07 Июль, 2009 13:51 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Это ты пилу с другого конца смотришь... :mrgreen:

Автор:  Alexey Veselovsky [ Вторник, 07 Июль, 2009 13:52 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Вумный .нет изменил стратегию сборки мусора/выделения памяти?

Вообще деталей реализации бы... А то так сложно сказать... Вдруг там где-нибудь явно дергается сборщик мусора?

Автор:  Сергей Губанов [ Вторник, 07 Июль, 2009 15:35 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Это под Linux на Mono. Явный вызов сборщика эффекта не давал. Там сборщик мусора консервативный. Слишком консервативный. Пришлось кэширование часто используемых объектов делать, а то память росла.

Микрософтовский сборщик мусора точный, так что под Windows работало нормально без кэширования.

Автор:  Сергей Губанов [ Вторник, 07 Июль, 2009 16:20 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Смотрите на зелёный график (красный - "больная" программа).
Первые 70 минут система была под нагрузкой. Потом нагрузку отключили. "Нагрузочные" объекты в "зелёной" программе кэшировались, а в "красной" - нет. Память в "красной" росла (хотя если бы она была запущена под Windows с точным сборщиком мусора, то память бы не росла).

В "зелёной" программе при включённом кэшировании "пила сборки мусора" - правая (пологость с правой стороны), а после отключения нагрузки (и кэширования) - левая (пологость с левой стороны):
Вложение:
memory3.png
memory3.png [ 23.92 КБ | Просмотров: 5741 ]

Автор:  Alexey Veselovsky [ Вторник, 07 Июль, 2009 16:59 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Какой алгоритм кэширования? Что там вообще происходит? Можно смоделировать ситуацию максимально просто (до сотни строк кода)?

Автор:  Alexey Veselovsky [ Среда, 08 Июль, 2009 07:45 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Кстати, а подобная картина (обратная пила) наблюдается при наличии кэширования как на моно так и на мелкомягком дотнете?

Автор:  Сергей Губанов [ Четверг, 09 Июль, 2009 20:04 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Там есть короткоживущие объекты (несколько миллисекунд), и долгоживущие (несколько десятков секунд). Вот некоторые долгоживущие я кэшировал. Кэш содержал не более сотни объектов каждого типа, а вообще объектов несколько тысяч.

Под Windows я не смотрел что будет, просто было некогда.

Сегодня нашёл у "красной" программы ещё и обычную составляющую "утечки" памяти не связанную с фрагментацией кучи и/или консервативностью сборщика мусора (там при большой нагрузке CDR-ы генерировались с большей скоростью чем отправлялись в БД, они накапливались в памяти).

Автор:  Сергей Губанов [ Вторник, 21 Июль, 2009 11:56 ]
Заголовок сообщения:  Re: Загадка со сборкой мусора

Установлено, что на успешность работы Mono-вского сборщика мусора решающее значение оказывает вовсе не кэширование объектов само по себе (объекты можно не кэшировать), а... обнуление всех полей объекта после того как объект становится не нужным.

Зловещая консервативность :evil: :evil: :evil:

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/