次の2行をmyの先頭に追加しましたinit.el
。
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
つまり、割り当てられたメモリの800kbごとにガベージを収集するのではなく、Emacsはアイドル状態、つまり一時停止が気にならないときに収集します。(1GBのメモリを割り当てた後にも収集されますが、そうなるとは思いません)。
これにより、起動時間が約3分の2短縮されました。理論的には、一般にパフォーマンスも改善するはずです。このアプローチには欠点がありますか?
よるとステファン・モニエことで、この記事: 「より良い、それを触れないでEmacsの-22我々は、GC-短所しきい値を増やすとしてではなく欠点がない同じ利点を提供し、GC-短所-割合を導入し、それをいじるする必要はありません。。つまり、ユーザーが.emacsからgc-cons-threshold設定を削除することをお勧めします。」
—
izkon
@Erik私はあなたが交換することができると思う
—
ハイエンジェル
(eval-when-compile (* 1024 1024 1024))
とmost-positive-fixnum
(そうしてください、私は彼らの設定にあなたの質問をコピーし、あなたのコードに出くわす皆かなり確信しています)。
@ Hi-Angelそれはいい考えだとは思いません。Emacsが実際にアイドル状態にならずに大量のメモリを割り当てる場合、システムがスワップするか完全にメモリを使い果たすまで割り当てを続ける代わりにgcを使用する必要があります。どちらかといえば、1GBはすでに高すぎます。
—
エリック
gc-cons-threshold
、いつでも実際にヒットするよりも高く設定するべきではありません。なぜなら、その値を時々実際にヒットすると仮定する必要があるためです予想外に熱狂的な非アイドルタスク)。アイドルタイマーを使用してgcをトリガーする場合、特に問題は発生しませんが、非アイドルgcのしきい値をOTTのように高く設定すると、私の印象では、値はおそらく「私よりも高い」 「私が使用したいと思う最高のもの」ではなく、「必要になる」。