내 상단에 다음 두 줄을 추가했습니다 init.el
.
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
즉, Emacs는 800kb의 할당 된 메모리마다 가비지를 수집하는 대신 유휴 상태 일 때, 즉 일시 중지로 인해 방해받지 않을 때 그렇게합니다. (또한 1GB의 메모리를 할당 한 후에 수집하지만 그럴 것이라고는 생각하지 않습니다).
이로 인해 시작 시간이 약 2/3 향상되었습니다. 이론적으로는 일반적으로 성능도 향상시켜야합니다. 이 방법에 단점이 있습니까?
Stefan Monnier의이 글에 따르면 : "더욱 손대지 마십시오. Emacs-22에서는 gc-cons-threshold를 늘리는 것과 같은 이점을 제공하지만 단점없이 gc-cons-percentage를 도입했습니다. 즉, 사용자가 .emacs에서 gc-cons-threshold 설정을 제거하는 것이 좋습니다. "
—
izkon
@Erik 나는 당신이 대체 할 수있는 생각
—
Hi-Angel
(eval-when-compile (* 1024 1024 1024))
으로 most-positive-fixnum
(그렇게하십시오, 나는 그들의 설정에 귀하의 질문에 복사를 통해 코드를 제공 확신 모두 있어요) .
@ Hi-Angel 나는 그것이 좋은 생각이라고 생각하지 않습니다. 만약 Emacs가 실제로 유휴 상태가되지 않고 많은 양의 메모리를 할당한다면, 시스템이 메모리를 완전히 교환하거나 고갈시킬 때까지 계속 할당하는 대신 gc를 사용해야합니다. 1GB가 이미 너무 높습니다.
—
Erik
gc-cons-threshold
실제로 주어진 시간에 명중에 당신이 가정하는 당신이한다고하기 때문에, 당신보다 더있는 거 기꺼이 것입니다 실제로 결국, 사람이 많은 쓰레기가 발생 될 수있는 방법을 알고있다 (때때로 그 값을 명중 예기치 않은 열정적 인 비 유휴 작업으로 인해). 유휴 타이머로 gc를 트리거하는 데 특별한 문제가 보이지 않지만 유휴 상태가 아닌 gc의 임계 값을 OTT처럼 높게 설정하면 내 생각에 값이 "나보다 높은 것으로 선택되었습니다. "내가 사용하고자하는 최고"보다는 "항상 필요할 것"입니다.