浏览一下 SICStus Prolog用户手册 我偶然发现了Prolog的旗帜 gc_tracing
.
我想知道更多的东西,所以我开始在... ... "图书索引" 并发现3个条目为 gc_trace
:
G gc_trace (prolog 标志): ref-lps-flg (#1: "4.9.4 Prolog Flags") gc_trace (prolog标志): ref-mgc-egc (#2: "4.10.3 启用和禁用垃圾收集器") gc_trace (prolog标志): ref-mgc-mgc (#3: "4.10.4 监控垃圾收集")
当我跟着链接走的时候,我发现了以下内容。
4.9.4 Prolog标志
gc_trace
管理全局堆栈垃圾收集跟踪消息。
冗长的 开启垃圾收集的动词跟踪。 简洁 开启垃圾收集的梗概跟踪。 关闭 关闭垃圾收集器的跟踪(默认)。
4.10.3 启用和禁用垃圾收集器。
[...] 要在verbose模式下监控垃圾收集,请将gc_trace标志设置为verbose。[...]
4.10.4 监视垃圾回收
默认情况下,用户不会得到任何关于垃圾收集器正在运行的指示。如果没有程序用完空间,也没有使用大量全局堆栈空间的程序需要过多的处理时间,那么这种信息就不太可能被需要。
但是,如果一个被认为使用了很多全局栈空间的程序跑出了空间,或者运行得异常缓慢,那么用户可能要确定是否需要更多或更少的垃圾收集频率。通过打开gc_trace Prolog标志从垃圾收集器获得的信息可以帮助判断。
在频谱上"简明扼要 - 啰嗦",我会说。Terse! 哈哈,只是认真的:)
最后,废话不多说,下面是我的实际问题。
给定OCaml垃圾回收器的verbosity标志, 找到合适的组合来对应SICStus Prolog GC的verbosity级别 "关闭", "简练",和"冗长".
来自 OCaml用户手册:
模块GC
mutable verbose : int;
该值控制标准错误输出的GC信息。它是以下一些标志的总和,用于打印相应事件的信息。
0x001
主要GC周期的开始。0x002
小集合和大GC分片。0x004
堆的增长和收缩。0x008
调整堆和内存管理器表的大小。0x010
堆的压缩。0x020
GC参数的改变。0x040
计算主要GC分片大小。0x080
调用最终化函数。0x100
启动时的字节码可执行文件和共享库搜索。0x200
计算压实触发条件。0x400
程序退出时输出GC统计数据。默认值。0
.
end_of_file
在这里,我想知道更多的信息,于是我开始在 "书籍索引 "中找到了3条gc_trace的条目:G gc_trace ... terse
值仅打印一个简短的指示,表明GC即将发生。该 verbose
值打印了更多关于GC的细节。这些细节没有记录在案,可能会发生变化,也就是说,它们是供人使用的。
SICStus GC确实有类似于 "minor "和 "major "的集合,但是它的 verbose
的输出对于minor和full collection都是一样的。
当内存区域改变大小时,并不是 "垃圾收集",因此,目前没有办法在这种情况发生时获得指示(除了事后,通过调用 statistics
).
我不知道OCaml内存管理器,但我猜测非off
值主要对应于前两个("主要GC周期的开始 "和 "次要收集和主要GC切片。")OCaml标志。