Поскольку http не имеет гражданства, каждый запрос приложения создает новый объект. Как Rails очищает неиспользуемые объекты/как часто?Ruby/Rails сбор мусора
ответ
Простой ответ: среда выполнения рубин имеет сборщик мусора. В зависимости от времени выполнения (JRuby/JVM generational GC, IronRuby/CLR generational GC, классический Ruby/mark-sweep GC) используются разные алгоритмы. Но основы довольно просты:
- После запроса распределения, если есть «недостаточно свободное памяти» доступно - насколько недостаточно является одним из компонентов алгоритма GC - то GC начнет
- GC начинается с сканирования корней, которые являются глобальными переменными и местоположениями стека (параметры и локальные переменные), чтобы обнаружить, какие объекты все еще живы; он отмечает каждый найденный объект
- Затем процесс GC обрабатывает ссылки (ссылки) внутри этих объектов и возвращает в те объекты, которые еще не были отмечены.
- Затем GC может начать перемещение/копирование всех отмеченных объектов так что они уплотняются в памяти
- «Свободный указатель», откуда происходят новые выделения, сбрасывается до конца этого компактного блока памяти
- Если по-прежнему имеется «недостаточно свободной памяти», тогда выделяется больше из операционной системы
- Все старые объекты, которые не были отмечены во время процесса сканирования, являются мусором и неявно отбрасываются через th e копирование и сброс свободного указателя.
Частота коллекций зависит от настройки ОГО, который может быть затронут операционной системой, объем физической памяти, давление операционной системы памяти, управляемого пользователем настроек, лежащими в основе платформы версии ревизии, динамически оптимизирован параметры и т. д. Многое из этого сводится к тому, чтобы решить, где бар находится в тесте «недостаточно свободной памяти», хотя вещи становятся более сложными с коллекторами коллекций.
Если вас это интересует, вы должны ознакомиться с серией блога о сборке мусора с копией на запись командой Phusion и их усилиями по улучшению схемы ruby gc по умолчанию в Ruby Enterprise Edition.
http://izumi.plan99.net/blog/index.php/2007/04/05/saving-memory-in-ruby-on-rails/
Другие ссылки в серии здесь:
- 1. Сбор мусора
- 2. Сбор мусора
- 3. Сбор мусора YGCT и сбор мусора Время продолжает расти
- 4. Сбор урожая мусора Vs Сбор мусора в .NET
- 5. Целеустремленность и сбор мусора
- 6. java basics сбор мусора
- 7. Сбор мусора/связанный список
- 8. Сбор мусора и стружки
- 9. Erlang сбор мусора
- 10. C# Сбор мусора?
- 11. javascript addEventListener - сбор мусора
- 12. Unity3D: оптимизировать сбор мусора
- 13. Сбор мусора - старое поколение
- 14. Сбор мусора Python
- 15. Perl XS сбор мусора
- 16. Сбор мусора рабочей среды?
- 17. Сбор мусора .Net
- 18. Фрагменты Сбор мусора
- 19. Java - сбор мусора
- 20. Сбор мусора Java 5
- 21. Сбор мусора в ThreadPool?
- 22. Java: сбор мусора
- 23. Сбор мусора Php
- 24. Генераторы PHP - сбор мусора
- 25. DoctrineCommonCache сбор мусора?
- 26. Сбор мусора в C++
- 27. Сбор мусора в Perl
- 28. Запрос на сбор мусора?
- 29. Основные данные «сбор мусора»
- 30. Сбор мусора весеннего контейнера