https://github.com/openjdk/jdk/blob/master/src/hotspot/share/gc/g1/g1CardSet.cpp#L58
The max #cards in a heap region is passed to max_cards_in_card_set, but the heap range covered by a cardset container is not necessary a region. If the #cards_in_region is too large, multiple cardset containers are required to fully cover that heap range.
* This prevents upgrading a Howl container to Full with virtualized remembered sets (Heap regions >= 64M) as the (default) threshold for coarsening from Howl to Full is max_cards_in_cardset * 0.9, which is always higher than the value tested against (65k, max card set container element number).
* This also unnecessarily increases the bits used for inline ptrs
g1CardSet.cpp:58
(uint)HeapRegion::CardsPerRegion, /* max_cards_in_cardset */
(found by ayang)