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?
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 ".(eval-when-compile (* 1024 1024 1024))
pormost-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) .Respostas:
Até onde eu sei, se você tem RAM, está tudo bem, mas se o Emacs tiver atingido um uso realmente alto antes da gravação em GC, poderá demorar muito tempo. Não sei exatamente o que Eli quer dizer; É ISTM que, se você tiver memória suficiente, tudo ficará bem, mas ele é o especialista aqui.
Dito isso, já usei essas linhas no meu arquivo init por um tempo e ajuda a reduzir o tempo de inicialização sem tornar as alterações permanentes:
fonte
after-init-hook
?