On Wed, 26 Apr 2023 09:12:24 GMT, Thomas Schatzl <tscha...@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
>
> Thomas Schatzl has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   cplummer review

> I think you are right about using is_humongous() directly here: the reason we 
> skip compacting of humongous regions during the "main" compaction is 
> intentional here

However, I am unable to discern the difference -- why `is_young_gc_movable` is 
semantically-correct in one place, but not in the other in this concrete 
example.


bool G1CollectionSetChooser::should_add(HeapRegion* hr) {
  return !hr->is_young() &&
         G1CollectedHeap::heap()->policy()->is_young_gc_movable(hr) &&


vs


void G1FullCollector::before_marking_update_attribute_table(HeapRegion* hr) {
  if (hr->is_free()) {
    _region_attr_table.set_free(hr->hrm_index());
  } else if (hr->is_humongous()) {


Looking at where `G1CollectionSetChooser::should_add` is called, can one use 
`hr->is_old()` instead of `!hr->is_young() && 
G1CollectedHeap::heap()->policy()->is_young_gc_movable(hr)`? (In fact, I 
believe that inlining `should_add` to the caller would result in a smoother 
code flow and prevent some duplicate region-type queries.)

In my opinion, introducing a new `is_young_gc_movable` API in this particular 
PR may not be entirely justified. It may make more sense to introduce it in 
later PRs where region-pinning is supported and the API is actually utilized.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/13643#issuecomment-1525434952

Reply via email to