GC improvement: keep separate object metadata in a compact set of memory pages to avoid full sweeping
Motivation
In the current implementation, both the blocking and non-moving GC seem (I didn't check the code) to sweep over all allocated memory pages of the heap. This causes trashing when swap space is used to complement main memory. Even without swap space and the problem of trashing, this is a problem for two reasons: (1) in the case of blocking GC it causes long downtime especially if the heap is large and the memory bandwidth is low (e.g. Raspberry Pi); (2) in the case of non-blocking GC, it causes heavy competition for memory bandwidth, slowing down memory accesses.
Proposal
A much better approach would be to keep a separate compact set of memory pages with metadata about what objects are present in the allocation areas, so that the garbage collector has to sweep over a small memory area only and directly release the other memory pages without touching them.