Provate ad eseguire il seguente codice elisp
(message "Emacs loaded in %s with %d garbage collections."
(format "%.2f seconds"
(float-time
(time-subtract after-init-time before-init-time)))
gcs-done)
cosa vi stampa? A me sul laptop di lavoro da
Emacs loaded in 2.23 seconds with 35 garbage collections.
poi riprovo da quello di casa.
In generale è interessante analizzare lo start-up time per cercare di ridurlo.
A tale fine entra in gioco l’interazione del garbage collector, il cui comportamento può essere indirettamente condizionato tramite il valore di un paio di variabili tipo gc-cons-threshold
.
Come tecnica di ottimizzazione ho visto in giro la seguente: all’inizio del config si mette un valore alto come 50MB.
(setq gc-cons-threshold (* 50 1000 1000))
E poi alla fine della config lo si abbassa a 2MB.
(setq gc-cons-threshold (* 2 1000 1000))
Un’altra variable interessante da analizzare è gc-cons-percentage
, che invece rappresenta la % di memoria della heap utilizzata per allocare lisp objects da Emacs.
Detto questo quel threshold non viene utilizzato in modo “diretto”. Nel senso, da quello che ho capito, il GB si può potenzialmente attivare successivamente al superamento della treshold. La cosa non è sincrona in ogni caso, nel senso che puoi passare la treshold ma il GB si attiva solo più tardi.
Ultima cosa: il pacchetto esup
è utile per misurare lo start-up time di Emacs. La cosa utile del pacchetto è che effettua del profiling, ovvero ti permette di capire dove il tempo di startup viene speso in modo da rendere più efficiente la config.
Riferimenti: