In order to reduce memory usage after G1 could not clean out a whole region during evacuation because of evacuation failure or pinning, keep regions that experienced an object that could not be moved in the same generation as useful.
This could make it possible to reclaim the space in the next gc if this is in survivor.
One heuristic could be aging the objects that stay in-place (if there are lots of failed objects): the age of the region is the maximum age of the objects inside.
If there are just a few ones which is typically the case for regions with pinned objects it might be useful to always at least keep a remembered set regardless of generation to reclaim it in the next gc.
The reason is that a) either the evacuation failure free up enough space anyway or b) pinned regions extremely often only contain a few objects.
Another idea may be eagerly reclaiming these (mostly pinned) regions like humongous objects.
Particularly young gen sizing will need to be adapted to take these regions better into account. They are typically very sparsely populated, which means that the region based heuristics will be off.