A typical pcp collector currently can easily take up several hundred kilobytes of RAM. Creating lots of collectors (say, by creating lots of pcp groups) can thus quickly eat up large amounts of RAM, and also CPU time.
The reason for this is that the collector objects store lots of temporary data, including stacks used by the collection routine. So each collector has such a stack, which most of the time sit unused.
We should be able to remove most of these, and thus reduce the memory usage considerably.
Only caveat is that those collectors are also accessed by the GAP kernel code in src/objcftl.c (which really is there only for polycyclic). So any change needs to be coordinated between GAP and polycyclic.
A typical pcp collector currently can easily take up several hundred kilobytes of RAM. Creating lots of collectors (say, by creating lots of pcp groups) can thus quickly eat up large amounts of RAM, and also CPU time.
The reason for this is that the collector objects store lots of temporary data, including stacks used by the collection routine. So each collector has such a stack, which most of the time sit unused.
We should be able to remove most of these, and thus reduce the memory usage considerably.
Only caveat is that those collectors are also accessed by the GAP kernel code in
src/objcftl.c(which really is there only for polycyclic). So any change needs to be coordinated between GAP and polycyclic.