我对Lisp中的垃圾收集不太熟悉,我想知道如何管理它以避免
严重错误:
*inferior-lisp*
中的垃圾回收期间堆耗尽。
SLIME 2.20和SBCL 2.0.1
Heap exhausted during garbage collection: 0 bytes available, 16 requested.
Gen Boxed Code Raw LgBox LgCode LgRaw Pin Alloc Waste Trig WP GCs Mem-age
1 19685 0 1 0 0 0 5 644710992 359856 21474836 19686 0 1.0000
2 29304 0 1 0 0 0 13 960070208 196032 21474836 29305 0 0.0000
3 0 0 0 0 0 0 0 0 0 21474836 0 0 0.0000
4 0 0 0 0 0 0 0 0 0 21474836 0 0 0.0000
5 367 1 130 34 0 15 51 17101008 823088 38575844 547 13 0.0000
6 485 2 221 55 0 10 0 24716944 612720 2000000 773 0 0.0000
7 15224 0 1 0 0 0 0 498860064 32736 2000000 15225 0 0.0000
Total bytes allocated = 2145459216
Dynamic-space-size bytes = 2147483648
GC control variables:
*GC-INHIBIT* = true
*GC-PENDING* = true
*STOP-FOR-GC-PENDING* = false
fatal error encountered in SBCL pid 84761(tid 0x700000026000):
Heap exhausted, game over.
Error opening /dev/tty: Device not configured
Welcome to LDB, a low-level debugger for the Lisp runtime environment.
ldb>
我正在使用一种算法来解决组合问题,并且您可以猜测,搜索领域呈指数增长。没有必要增加dynamic-space-size
,因为这不能解决问题。因此,想法是在堆耗尽之前停止该进程。例如,达到内存限制时的情况。
欢迎任何帮助。
答案 0 :(得分:0)
似乎我的问题没有真正的答案。 我找到了一些准则来管理我的问题。 以下是记录的链接:https://sourceforge.net/p/sbcl/mailman/message/30184781/和https://sourceforge.net/p/sbcl/mailman/message/18414749/