On Tue, 25 Apr 2023 15:05:10 GMT, Albert Mingkun Yang <ay...@openjdk.org> wrote:
>> Hi all, >> >> please review this change that removes the pinned tag from `HeapRegion`. >> >> So that "pinned" tag for G1 heap regions indicates that the region should >> not move during (young) gc. This applies to now removed archive regions and >> humongous objects/regions. >> >> With "real" g1 region pinning to deal with gclocker in g1 once and for all >> upcoming we need a refcount, a single bit is not sufficient anymore. Further >> there will be a naming conflict as this kind of "pinning" is different to g1 >> region pinning "pinning". The former indicates "contents can not be moved, >> but can be reclaimed", while the latter means "contents can not be moved and >> not reclaimed". >> >> The (current) pinned flag is surprisingly little used, only for policy >> decisions. >> >> The suggestion this change implements is to remove the "pinned" tag as it >> is, and reserve it for future g1 region pinning (that needs to store the >> pinning attribute differently as a refcount anyway). >> >> Testing: tier1-3, gha >> >> Thanks, >> Thomas > > src/hotspot/share/gc/g1/g1HeapVerifier.cpp line 414: > >> 412: // There are no other valid region types. Check for one invalid >> 413: // one we can identify before crashing: non-movable. >> 414: assert(hr->is_young_gc_movable(), "Heap region %u is >> non-movable.", hr->hrm_index()); > > Given this branch is unreachable, can one just use `fatal(...)` without a > predicate? >The name, is_young_gc_movable, seems to suggest it is context sensitive. Maybe >it's clearer if it's not defined as an API of heap-region, like other >region-type-predicates. It is defined in `G1Policy`, there is simply a shortcut via `HeapRegion`. I considered removing that shortcut in `HeapRegion`, but then this would mean lots of clutter everywhere to get to the policy object. I will find a better location for a helper. > >For example, it's odd to see them on the same abstraction level, when the two >APIs refer to sth quite different. > > assert(hr->is_young_gc_movable(), "Should only be movable region in > compaction queue"); > assert(!hr->is_humongous(), "Should be no humongous regions in compaction > queue"); > >Additionally, it's confusing to see sth named "young_gc" in full-gc code >(g1FullGCPrepareTask.inline.hpp). I was too lazy to wrap it in a "movable-during-first-full-gc-attempt" method, will fix. I thought the comment would be enough. > >For this particular PR, could one just use !hr->is_humongous() where >is_young_gc_movable is used? (Essentially, inlining >the new API.) I do not like inlining this API because this looses the documentation of this condition. One would probably need to add a "(At the moment) Humongous regions are non-movable." comment everywhere to understand why that condition is there. Thanks, Thomas ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13643#discussion_r1176691594