...but the garbage collect thread is an unmitigated disaster. The theory of cooperative garbage collection is that a) garbage collection only takes place when the page has already been read, minimizing additional I/O, and b) it keeps the length of record chains to the theoretical minimum. The garbage collect thread not only defeats both of these, but is only of those rare features that the higher the load, the worse it works -- under load record chains get longer, which increases the cost of index and blob updates as all old record versions must be fetched and scanned, which increases the load even more, causing the garbage collect thread to fall farther and farther behind, increasing the load even more -- well, you get the picture.
https://sourceforge.net/p/firebird/mailman/message/17015961/