Currently we have two versions of code that attempts to satisfy parallel allocation requests out of a heap region and attempts to replace said heap region when it's full:
a) One version is for allocations by mutator threads.
b) Another version is for allocations by GC threads (i.e., when they need to copy objects from from- to to-space).
It'd be helpful to consolidate these two versions and have a single version of the code shared by the two paths above. This CR proposes the refactoring of the code of path a) in a separate class (G1AllocRegion). This is one step towards sharing this code by path b) (this will be done as a separate CR in the future).