Есть ли способ, чтобы предотвратить кучи исчерпаны в общем lisp - PullRequest
0 голосов
/ 16 марта 2020

Я не слишком знаком со сборкой мусора в 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 голосов
/ 17 марта 2020

Кажется, что нет реального ответа на мой вопрос. Я нашел несколько рекомендаций, с помощью которых я справлюсь со своей проблемой. Вот ссылки на запись: https://sourceforge.net/p/sbcl/mailman/message/30184781/ и https://sourceforge.net/p/sbcl/mailman/message/18414749/

...