The Prolog interpreter performs regularly a check point. The frequency is controlled by the pa-rameters GC_MAX_INFERS, which has been chosen so that a rate of ca. 60 Hz is archived. If in asynchronous mode, the Prolog interpreter yields during the check point allowing it to be non-blocking in a single threaded host.
Further during this check point we decided whether to invoke a major garbage collection or a minor garbage collection. A major garbage collection is a full garbage collection where we also update the serno interval and counter. A minor garbage collection is a generational garbage collection without updating the serno interval and counter:
The problem is determining a value for GC_MAX_INFERS since it depends both on the pro-gramming language runtime and on the device hardware. Since we were mostly working with one laptop, we used constants that fit this laptop. Especially in the browser, a GC_MAX_INFERS that is too low, causes a lot of harm, since auto-yield is capped by 4 ms.