Adicionei as duas linhas a seguir na parte superior da minha init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Isso significa que, em vez de coletar lixo a cada 800kb de memória alocada, o Emacs o faz quando ocioso, ou seja, quando a pausa não me incomoda. (Ele também é coletado após a alocação de 1 GB de memória, mas não acho que isso aconteça).
Isso melhorou meu tempo de inicialização em cerca de dois terços. Em teoria, também deve melhorar o desempenho em geral. Há alguma desvantagem nessa abordagem?
(eval-when-compile (* 1024 1024 1024))
por most-positive-fixnum
(por favor, faça isso, tenho certeza que todo mundo que se deparar com sua pergunta copia seu código em sua configuração) .
gc-cons-threshold
qualquer maior do que você está disposto a realmente acertar a qualquer momento, porque você deve assumir que você vai realmente bater esse valor ao longo do tempo (afinal, quem sabe o quanto de lixo pode ser acumulado por uma tarefa não ociosa inesperadamente entusiasmada). Não vejo um problema específico ao acionar o gc com um timer ocioso, mas acho que definir o limite para o gc não ocioso tão alto quanto parece OTT, e minha impressão é que o valor provavelmente foi escolhido como "mais alto do que eu" sempre precisará "em vez de" o mais alto que estou disposto a usar ".