Я добавил следующие две строки в начало моего init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Это означает, что вместо сбора мусора каждые 800 КБ выделенной памяти, Emacs делает это в режиме ожидания, то есть когда пауза не беспокоит меня. (Он также собирается после выделения 1 ГБ памяти, но я не думаю, что это произойдет).
Это улучшило мое время запуска примерно на две трети. Теоретически, это также должно улучшить производительность в целом. Есть ли недостатки этого подхода?
(eval-when-compile (* 1024 1024 1024))
на most-positive-fixnum
(пожалуйста, сделайте это, я уверен, что каждый, кто сталкивается с вашим вопросом, копирует ваш код в свою конфигурацию) .
gc-cons-threshold
более высокое значение, чем вы действительно хотите достичь в любой момент времени, потому что вы должны предполагать, что время от времени вы будете достигать этого значения (в конце концов, кто знает, сколько мусора может накопиться какой-то неожиданно-восторженной не праздной задачей). Я не вижу особой проблемы с запуском gc с таймером простоя, но я думаю, что установив порог для неактивного gc так высоко, как кажется OTT, и у меня сложилось впечатление, что значение, вероятно, было выбрано как «выше, чем я». мне когда-нибудь понадобится "а не" самый высокий, который я готов использовать ".