Agregué las siguientes dos líneas en la parte superior de mi init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Eso significa que en lugar de recolectar basura cada 800kb de memoria asignada, Emacs lo hace cuando está inactivo, es decir, cuando la pausa no me molesta. (También se acumula después de asignar 1 GB de memoria, pero no creo que eso suceda).
Esto mejoró mi tiempo de inicio en aproximadamente dos tercios. En teoría, también debería mejorar el rendimiento en general. ¿Hay alguna desventaja en este enfoque?
gc-cons-threshold
más alto de lo que realmente está dispuesto a golpear en cualquier momento dado, porque se debe asumir que va a realmente llegar a ese valor de vez en cuando (después de todo, ¿quién sabe cómo podría devengar mucha basura por alguna tarea inesperadamente entusiasta no inactiva). No veo un problema particular con la activación de gc con un temporizador inactivo, pero creo que establecer el umbral para gc no inactivo tan alto como parece OTT, y mi impresión es que el valor probablemente fue elegido como "más alto que yo" Alguna vez necesitaré "en lugar de" lo más alto que estoy dispuesto a usar ".(eval-when-compile (* 1024 1024 1024))
conmost-positive-fixnum
(realice esta acción, estoy bastante seguro de todo el mundo que viene a través de las copias de interrogación el código en su configuración) .Respuestas:
Hasta donde sé, si tiene la RAM, está bien, pero si Emacs alguna vez alcanzó un uso realmente alto antes de GC, podría llevar mucho tiempo. No estoy seguro exactamente de lo que quiere decir Eli; ISTM dice que si tienes suficiente memoria, debería estar bien, pero él es el experto aquí.
Dicho esto, he usado estas líneas en mi archivo de inicio durante un tiempo, y ayuda a reducir el tiempo de inicio sin hacer que los cambios sean permanentes:
fuente
after-init-hook
?