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?
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 ".(eval-when-compile (* 1024 1024 1024))
denganmost-positive-fixnum
(tolong lakukan, saya cukup yakin semua orang yang menemukan pertanyaan Anda menyalin kode Anda ke konfigurasi mereka) .Jawaban:
Sejauh yang saya tahu, jika Anda memiliki RAM, tidak apa-apa, tetapi jika Emacs pernah mencapai penggunaan yang sangat tinggi sebelum GC'ing, mungkin butuh waktu lama. Saya tidak yakin persis apa yang dimaksud Eli; ISTM bahwa jika Anda memiliki memori yang cukup, itu akan baik-baik saja, tetapi dia ahli di sini.
Karena itu, saya telah menggunakan baris ini di file init saya untuk sementara waktu sekarang, dan ini membantu mengurangi waktu startup tanpa membuat perubahan permanen:
sumber
after-init-hook
?