Emacs和外部进程互相交互的时候(比如用Eshell跑一个视频播放器,或者多个Aria2),垃圾回收会导致卡卡的。
我想直接禁用垃圾回收,然后手动判断并回收,反正我的内存大,也不怕消耗。
唯一的问题在于,我如何得知什么时候占用内存过大,需要回收呢
memory-use-counts
这个方法返回的数量基本上加起来一直在 2.3G 左右
memory-info
这个方法在Mac上一直返回nil (源码里也确实没加其他系统的支持)
我期望的是可以找到一个指标,代表了Emacs内存占用高低,它在调用 garbage-collect 之后会显著减少,会有这个东西吗
1 个赞
调到最大后就没有GC了,我怕人不在的时候会出问题(比如系统突然炸了)。。。
就是不知道手动GC的触发时机和频率多久合适。。。。
---
外部进程交互有GC是肉眼可见的,比如在 shell 里编译,或者那种日志特别特别多的情况下,gc-post-hook 疯狂调用的
在会造成大量 GC 的行为前设置,用完调回來啊。(比如用个 hook, unwind-protect)
因為向 buffer 里倒太多东西的原因。这種情況就 redirect 输出到临时文件或者 /dev/null
去。
那要是找不到这个行为呢,缓慢增长的那种。。。比如平时写一点脚本什么的
正常的会在不经意间突然顿一下。。。很讨厌。
我希望可以自己控制,虽然也是顿一下。但是至少是自己要求的顿一下
明白了。那你可以在一开始把 gc-cons-threshold
调大。然后用 run-with-idle-timer
设置 idle 一定时间后临时调小做 GC。
嗯,好像也不需要临时调小,直接调用 garbage-collect 方法应该是一样的效果