Конференции ИВТ СО РАН


«Вычислительные и информационные технологии
в науке, технике и образовании»

Алматы, Казахстан, 6 – 10 октября 2004 года

Тезисы докладов


Трехпоколенная сборка мусора

Марков А.Н.

Институт Систем Информатики им. А.П.Ершова (Новосибирск)

В настоящее время наблюдается постоянный рост темпов развития информационных технологий. Для того чтобы упростить и ускорить процесс создания информационных систем разрабатываются более высокоуровневые, безопасные и простые в использовании языки программирования. Одной из технологий, упрощающих программирование, является автоматическое управление памятью, или, как ее еще называют, сборка мусора. В системах с автоматическим управлением памятью память освобождается неявно, когда сборщик мусора обнаруживает, что она более не может быть использована программой. В настоящее время существует несколько языков со сборкой мусора, например Lisp, Java, ML. Однако сборка мусора влечет за собой некоторые накладные расходы.

Для сборки мусора, как правило, приостанавливается работа всей программы. Для уменьшения времени паузы широко применяются поколенные алгоритмы сборки мусора. Эти алгоритмы разделяют всю кучу (динамическую память) на несколько областей (поколений), как правило, на два - старшее поколение и младшее поколение. Время сборки мусора уменьшается за счет того, что большинство сборок мусора происходит не во всей куче, а лишь в ее части. Эффективная работа поколенных сборщиков мусора основана на поколенных гипотезах. Слабую поколенную гипотезу можно сформулировать так: подавляющее большинство объектов становится мусором по прошествии очень небольшого времени. Сильная поколенная гипотеза добавляет к этому условию следующее: оставшаяся часть объектов остается используемой очень долгое время. Слабая поколенная гипотеза выполняется практически для всех приложений в языках, где нет стековых объектов (например, в языке Java), т.к. большинство объектов являются временными и вспомогательными. Сильная поколенная гипотеза выполняется далеко не для всех приложений.

В настоящее время используются в основном двухпоколенные сборщики мусора. Многие исследователи считают, что двух поколений более чем достаточно, а введение еще одного поколения не дает никаких преимуществ и при этом значительно усложняет сборщик мусора. Однако двухпоколенный сборщик мусора не дает оптимальной производительности, если не выполняется сильная поколенная гипотеза, т.е. имеется немалое количество средне-живущих объектов. При этом возможны два случая деградации производительности: во-первых, если средне-живущие объекты остаются в младшем поколении, то в нем увеличивается время сборки мусора; во-вторых, если такие объекты перемещаются в старшее поколение, то старшее поколение наполняется слишком быстро и становятся частыми сборки мусора всей кучи.

Трехпоколенный сборщик мусора работает оптимально, даже если сильная поколенная гипотеза не выполняется. Младшее поколение представляет собой непрерывную область памяти (пул); при сборке мусора в младшем поколении используемые объекты перемещаются сразу в среднее поколение. Это обеспечивает быстрое выделение новых объектов, а также эффективную сборку мусора, если выполняется слабая поколенная гипотеза. В среднем поколении объекты "стареют", они не сразу перемещаются в старшее поколение. Это обеспечивает эффективную работу, даже если не выполняется сильная поколенная гипотеза. Адаптивное изменение размеров поколений позволяет настраивать сборщик мусора на конкретное поведение программы.

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

Дополнительные материалы: ZIP (191 kb)
Примечание. Тезисы докладов публикуются в авторской редакции



Ваши комментарии
Обратная связь
[ICT SBRAS]
[Головная страница]
[Конференции]

© 1996-2000, Институт вычислительных технологий СО РАН, Новосибирск
© 1996-2000, Сибирское отделение Российской академии наук, Новосибирск