aboutsummaryrefslogtreecommitdiff
path: root/modules/gcmh-config.el
blob: beceb1a013b754724e4115ad9dfc67f97eeaa7ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
;;; gcmh-config.el --- Garbage collection strategy via gcmh -*- lexical-binding: t -*-

;;; Commentary:
;; gcmh (the Garbage Collector Magic Hack) owns `gc-cons-threshold' for the
;; session.  It keeps the threshold very high while you are active so GC never
;; pauses mid-edit, then drops it and collects on idle, when a pause is
;; invisible.  This replaces the old hand-rolled scheme -- a stock-800KB restore
;; in early-init.el plus a minibuffer setup/exit bump -- which pinned GC at
;; 800000 (Emacs's bare-editor default), far too low for a config this size and
;; the cause of frequent GC pauses during completion, agenda builds, and LSP/AI
;; activity.
;;
;; Kept in its own module, not system-defaults.el: that module is pre-loaded by
;; the comp-errors test harness, which has no package system, so an `:ensure'
;; package there errors at load time.  early-init.el bumps the threshold to
;; `most-positive-fixnum' for startup and deliberately does not restore it;
;; `gcmh-mode' takes ownership from here on.

;;; Code:

(use-package gcmh
  :ensure t
  :demand t
  :config
  (setq gcmh-idle-delay 'auto                          ; scale the idle GC delay to GC cost
        gcmh-high-cons-threshold (* 1 1024 1024 1024)) ; 1 GB during activity
  (gcmh-mode 1))

(provide 'gcmh-config)
;;; gcmh-config.el ends here