Normally, the garbage collector is invoked only when some Prolog data area overflows, so the time of its invocation is not predictable. In some applications it may be desirable to invoke the garbage collector at regular intervals (when there is known to be a significant amount of garbage on the global stack) so that the time spent garbage collecting is more evenly distributed in the processing time. For instance, it may prove desirable to invoke the garbage collector after each iteration of a question-and-answer loop that is not failure-driven.
In rare cases the default garbage collection parameters result in
excessive garbage collecting costs or global stack expansion, and the user
cannot tune the
gc_margin parameter adequately. Explicitly invoking
the garbage collector using the built-in predicate
garbage_collect/0 can be useful in these circumstances.