Saya menambahkan dua baris berikut ke atas init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Itu berarti bahwa alih-alih mengumpulkan sampah setiap 800kb memori yang dialokasikan, Emacs melakukannya saat idle, yaitu ketika jeda tidak mengganggu saya. (Ini juga mengumpulkan setelah mengalokasikan 1GB memori, tapi saya tidak berpikir itu akan terjadi).
Ini meningkatkan waktu startup saya sekitar dua pertiga. Secara teori, itu juga harus meningkatkan kinerja secara umum. Apakah ada kelemahan dari pendekatan ini?
(eval-when-compile (* 1024 1024 1024))
dengan most-positive-fixnum
(tolong lakukan, saya cukup yakin semua orang yang menemukan pertanyaan Anda menyalin kode Anda ke konfigurasi mereka) .
gc-cons-threshold
lebih tinggi dari yang Anda inginkan untuk memukul pada waktu tertentu, karena Anda harus mengasumsikan bahwa Anda benar-benar akan mencapai nilai itu dari waktu ke waktu (setelah semua, siapa yang tahu berapa banyak sampah yang mungkin timbul oleh beberapa tugas non-idle yang tidak terduga - antusias). Saya tidak melihat masalah tertentu dengan memicu gc dengan timer idle, tapi saya pikir menetapkan ambang batas untuk gc non-idle setinggi ini tampaknya OTT, dan kesan saya adalah bahwa nilai itu mungkin dipilih sebagai "lebih tinggi daripada saya akan membutuhkan "daripada" yang tertinggi yang bersedia saya gunakan ".