Как я должен сделать вывод, когда GC должен работать?
Я пишу статически скомпилированный язык и хотел бы поддержать сборку мусора. Прежде чем приступить к его разработке, я хотел бы узнать, как мне определить, когда должен работать GC?
Должно ли это быть после каждых 16 МБ? (проверка после достаточного повышения или непосредственно перед тем, как выделить 16+ мб). Есть ли какой-то случай, чтобы проверить более эффективный цикл, чтобы циклы могли повторно использовать одну и ту же память? так далее
1 ответ
Лучшее время для запуска ГХ, вероятно, "когда у программы осталось немного времени". Например, если у вас есть цикл выполнения, а в очереди нет событий, возможно, самое время запустить GC. И затем, возможно, также, если распределитель GC заметит, что ему нужно будет запросить у ОС больше памяти. Я думаю, что это также зависит от дизайна GC, например, возможно спроектировать GC, который работает в своем собственном потоке и не прерывает программу, по сравнению с обычными GC "Stop the World".
Вопрос также в том, хотите ли вы внедрить GC только для обучения? Или ты просто хочешь GC? В последнем случае я предлагаю вам заглянуть в Boehm GC.