G1GCForwardReference grew organically and needs to be looked at to see if it could be refactored into something more extensible. One thought is to have a G1GCForwardReference interface with specific implementation for the different patterns. But this may lead to unwanted casting.