nikic left a comment
Here are my benchmark results, comparing three different workloads between master (OLD) and this PR (NEW). The first workload currently completely trashes the GC implementation on master, the other two are more lightweight.
Here the GC "disabled" lines mean disabled at runtime, so roots are still collected.
The most interesting is probably the first result:
For the compression, I wonder if the current scheme that separates compressed & uncompressed addresses is really worthwhile. I would suggest to always mask the address (something like this: https://gist.github.com/nikic/515dc2dfdc4912cee5c6e1fb17a4d276). This means that we always have to do a
In any case, I really like this implementation, dropping the linked lists makes this a lot nicer. It's a great improvement, let's land it!
@nikic thank you for review and benchmarks. Really impressive :)
You may play with GC_THRESHOLD adoption after the merge.
I'll think about compression once again.
I hope, I'll merge this by tomorrow evening.