Ответ 1
Вот быстрый и очень неполный список:
- Тест и бенчмарк. Одним из немногих недостатков слабого является сложность прогнозирования затрат времени и пространства. Если у вас нет тестовых данных, у вас ничего нет.
- Используйте лучшие алгоритмы. Это звучит слишком просто, но оптимизация неэффективных алгоритмов похожа на рэп с s ** t в золоте.
- Стратегически сделать некоторые данные более строгими. Test and Benchmark! Цель состоит в том, чтобы сохранить физически меньшее значение WHNF, а не то, что его производит, тем самым очищая больше мусора в самом эффективном первом проходе. искать сложные функции, которые производят простые данные.
- Стратегически сделать некоторые данные менее строгими. Test and Benchmark! Цель - задержка производства большого количества данных до момента ее использования и отбрасывания, тем самым очищая больше мусора в самом эффективном первом проходе. Ищите простые функции, которые производят большие сложные данные. См. Также comonads.
- Стратегически использовать массивы и распакованные типы, в частности, см. # 2. в отношении монады ST. Тест и контрольный показатель!. Все они подходят для более сырых данных в более компактную память. Собрать меньше мусора.
- Скрипт с настройками RTS (специфический ghc). Тест и тест! Цель состоит в том, чтобы "соответствовать импедансу" GC с потребностями в памяти вашей программы. Я становлюсь еще более потерянным здесь, а затем в 1-5, поэтому попросите экспертов об этом.
Лучшая сборка мусора имеет довольно простое предположение: создавайте меньше мусора, собирайте его раньше, создавайте меньше распределений/освобождений памяти. Любая вещь, которую вы можете сделать, может привести к тому, что один из этих трех эффектов стоит того. Тест и контрольный показатель!