The reason why G1 currently needs the "prev" bitmap is that after class unloading (at remark time at the moment) there will be objects that are not parseable in the old gen heap. (This property is required for e.g. remset scanning).
We could make the heap parseable again by stuffing integer arrays into these places. Previously we thought that iterating the heap was too expensive to do, so we did not consider this.
However, during rebuild remset we already concurrently walk the heap.
Care needs to be taken about the BOT (which needs to be updated as well), and that we then need to move the class unloading into the Cleanup pause, i.e. keep the heap parseable during gcs while rebuilding.
Advantages:
1.5% of Java heap memory saved
potential speedups during scanning cards (refinement, during GC)
Disadvantages:
concurrent BOT update
lengthens concurrent cycle
classes can not be unloaded as early as now