Regarding the G1CollectorPolicy_BestRegionsFirst class, I just removed it and put all its functionality into G1CollectorPolicy. If we ever want to have separate policies for G1 we can rethink the way we do it. Currently, we only have one and the way the "general" vs. "specific" separation was done was somewhat arbitrary. At least in the short- to medium- term we're better off not having the separation.
As part of the G1CollectorPolicy_BestRegionsFirst class removal, I made all the protected members private given that G1CollectorPolicy has no subclasses any more. I also devirtualized a bunch of methods (a lot of record_*-type methods) which do not need to be virtual (and never needed to be in the first place).