While investigating the behavior of G1 with the OpenDS benchmark, Laurent Daynes and Thomas Schatzl (at Oracle Labs) discovered that the freeing of finge grain RSet entries was the source of a significant slow down.
Specifically the slowdown was eeen while placing freed PerRegionTables on to the PerRegionTable free list individually.
As a result Thomas Schatzl has come up with a scheme where the PerRegionTables in an individual RSet are chained together (linked through the same link that is also used by the free list). When the RSet is freed - the chained PerRegionTables that make up the fine grain entries can be placed on to the global PerRegionTable free list in a single bulk freeing operation.
This should significantly reduce the number of compare-exchange operations performed when freeing dense fine-grain tables.
Since the fine-grain table is an opnely addressed hash table - a separate link for the next entry in the collision chain is added and maintained.