Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Управление памятью для HN0

Просмотрел диссертацию по connectivity-based garbage collection.

Собственно, идея статического разбиения кучи на партиции не нова - регионы уже были.

Интересно то, что
- придуман новый, по сравнению с регионами, принцип разбиения,
- придуман новый, по сравнению с поколениями, принцип инкрементальной сборки
- оверхед от поддержки партиций в коллекторе (object-to-partitions mapping и пр) оказывается приемлемым, и открывается дорога сборщикам без write barrier с другими принципами разбиения, чем connectivity.

Таким образом, после прочтения этой работы можно надеяться на построение некоего идеального сборщика

- не производящего полные сборки благодаря статическому анализу
- производящего сборку только в выделенных регионах (остальные классически удаляются целиком по статически размещенному delete)
- точного (не консервативного), но позволяющего совместное существование собираемых и несобираемых объектов

Плюс есть работы, позволяющие благодаря статическому анализу (с помощью системы типов) производить сборку без меченых указателей ( раздел The representation of integers, tag bits, heap-allocated values) и боксов вокруг объектов, не читая при этом из трассируемой кучи ничего, кроме указателей. Фактически, компилятор генерирует для программы специализированный сборщик, в котором захардкожено, где в каком типе объектов кучи и стек-фрейме указатели и на объекты каких типов они указывают.

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

Не нужна - в смысле, что большинство программ, но не все, прекрасно обходятся статически предсказываемыми деаллокациями. Сборка мусора в императивных языках присутствует потому, что статический анализ деаллокаций (escape analysis + ownership types + регионы) и нетрассирующие рантайм-техники (refcounts) хорошо работают всего для 99% программ, а хочется универсальности. В функциональных языках структура ссылок между объектами кучи сложнее и труднее для анализа из-за широкого использование persistency, поэтому мне непонятно, насколько хорошо статический анализ работает там.
Tags: compiler design, литература
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments