gc-cons-threshold
指定了垃圾回收前允许有多少字节的consing. 这个值一般是800000bytes, 但是这会使得我在Emacs启动期间调用多达39次的垃圾回收!!!,而垃圾回收的过程又巨慢无比.
我有16G的内存,因此我把这个值设置成了大约100MB. 现在我的Emacs在启动期间根本不会发生垃圾回收过程,这使得我的启动时间加快了600毫秒.
file-name-handler-alist
的默认值为
(("\\`/[^/]*\\'" . tramp-completion-file-name-handler)
("\\`/[^/|:][^/|]*:" . tramp-file-name-handler)
("\\`/:" . file-name-non-special))
也就是说在Emacs在启动过程中加载el和elc文件时都会将其文件名与这些正则表达式进行匹配.
这使得我的启动时间又快了200毫秒.
应用这个补丁
Emacs在加载el文件(也许加载elc文件时也是这样)时使用的,会用 getc
函数从FILE中读取字符.
getc
由于使用了锁机制因而是线程安全的. 然而在单线程中循环调用 getc
就显得没有必要了.
我将 getc
替换成 getc_unlocked
之后,启动速度又提升了200毫秒.
整体来说,我的启动速度从1.5秒缩短到了0.5秒! 真爽啊 :)