The symbol table stores references to symbols. Each of these symbols is reference counted; if the reference count of a symbol reaches zero, it can be removed.
Currently, the symbol table is cleaned up during various GC pauses, as it provides a convenient opportunity where no random modification by other threads can occur.
However, particularly because this cleanup process is serial, it takes a long time. In particular across a large range of FMW applications (see attached log file), it takes 50% of remark pause time, which is way too high.
Symbol table scan/scrubbing pause time must be improved; there are several options for this:
- parallelize this task
- incrementally scrub the symbol table (i.e. only parts at once) given e.g. a time allowance
- maybe move it or parts of it, e.g. just finding the scrub-able entries, to a concurrent task