Устройство

Generational. Два поколения. Minor и major heap. Ref list. Три типа сборки - minor + major slice, major, compaction. Gc не лазит за пределы heap'ов, использует тэги в заголовках блоков для определения структуры данных для обхода.

Тюнинг

Имеет смысл если профайлинг показывает что программа большую часть времени проводит в сборщике мусора. В качестве меры работы Gc можно использовать отношение promoted words к minor words (чем меньше, тем лучше).

  1. По-умолчанию (в ocaml <= 3.12.0) размер minor heap слишком маленький (для современных систем). Рекомендуется поэкспериментировать в сторону увеличения.

  2. Аналогично major heap increment (на сколько увеличивается major heap).

  3. Рантайм вызывает major gc основываясь на оценках кол-ва мусора в heap'е. Эта оценка регулируется параметром space\_overhead.

  4. Compaction вызывается основываясь на max\_overhead.

Cм. документацию на модуль Gc.

Огромные долгоживущие структурно-неизменяемые массивы данных при каждом цикле gc будут проверяться мусорщиком. Варианты решения :

See also


2011-03-26 13:09