有没有一种方法可以防止普通Lisp中的堆耗尽

时间:2020-03-16 11:27:20

标签: garbage-collection common-lisp sbcl

我对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,因为这不能解决问题。因此,想法是在堆耗尽之前停止该进程。例如,达到内存限制时的情况。

欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

似乎我的问题没有真正的答案。 我找到了一些准则来管理我的问题。 以下是记录的链接:https://sourceforge.net/p/sbcl/mailman/message/30184781/https://sourceforge.net/p/sbcl/mailman/message/18414749/