CRR (M): 7157073: G1: type change size_t -> uint for region counts / indexes
Jon Masamitsu
jon.masamitsu at oracle.com
Wed Mar 28 04:11:03 UTC 2012
Tony,
Looks good. A few questions.
http://cr.openjdk.java.net/~tonyp/7157073/webrev.0/webrev.1.G1Uints/src/share/vm/gc_implementation/g1/concurrentMark.cpp.frames.html
> 1841 BitMap::idx_t index = (BitMap::idx_t) hr->hrs_index();
> 1842 if (!hr->startsHumongous()) {
> 1843 // Normal (non-humongous) case: just set the bit.
> 1844 _region_bm->par_set_bit(index);
> 1845 } else {
> 1846 // Starts humongous case: calculate how many regions are part of
> 1847 // this humongous region and then set the bit range.
> 1848 G1CollectedHeap* g1h = G1CollectedHeap::heap();
> 1849 HeapRegion *last_hr = g1h->heap_region_containing_raw(hr->end() - 1);
> 1850 size_t end_index = (BitMap::idx_t) last_hr->hrs_index() + 1;
> 1851 _region_bm->par_at_put_range(index, end_index, true);
Why the choice to make index (line 1841) a BitMap::idx_t and end_index
(line 1850) a size_t? Seems like
end_index could also be BitMap::idx_t.
> 1709 gclog_or_tty->print_cr("Region %u: card bitmap mismatch at " SIZE_FORMAT ": "
> 1710 "expected: %d, actual: %d",
> 1711 hr->hrs_index(), i, expected, actual);
Since you changed the format for hr->hrs_index() to %u, maybe change the
other format
to $u also?
http://cr.openjdk.java.net/~tonyp/7157073/webrev.0/webrev.1.G1Uints/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.frames.html
> 2042 const uint max_region_idx = ((uint)1<< (sizeof(RegionIdx_t)*BitsPerByte-1)) - 1;
You might have been able to use 1U instead of (uint) 1.
> 2078 HeapRegionRemSet::init_heap((size_t) max_regions());
I would have changed the parameter to init_heap() to uint. Only one
call site.
http://cr.openjdk.java.net/~tonyp/7157073/webrev.0/webrev.1.G1Uints/src/share/vm/gc_implementation/g1/sparsePRT.cpp.udiff.html
> - gclog_or_tty->print_cr(" Adding card %d from region %d to region "
> - SIZE_FORMAT" sparse.",
> + gclog_or_tty->print_cr(" Adding card %d from region %d to region %u sparse.",
> card_index, region_id, _hr->hrs_index());
Why stay with the %d format? Same thing here
> - gclog_or_tty->print_cr(" Expanded sparse table for "SIZE_FORMAT"
> to %d.",
> + gclog_or_tty->print_cr(" Expanded sparse table for %u to %d.",
> _hr->hrs_index(), _next->capacity());
That's all.
Jon
On 3/27/2012 9:34 AM, Tony Printezis wrote:
> Hi all,
>
> I'd like a couple of reviews for this cleanup. We have been using
> size_t's to represent region counts / indexes and I have been
> encouraged to change those to uint's. This unfortunately turned out to
> be quite an extensive change that was hard to localize. I've split the
> change into two webrevs.
>
> First, this breaks down a long line in g1CollectedHeap.cpp. I I have
> it on a separate webrev as it messes up the webrev pages for the rest
> of the changes (i.e., the rest of the changes are easier to read with
> this excluded):
>
> http://cr.openjdk.java.net/~tonyp/7157073/webrev.0/webrev.0.G1LongLineFix/
>
>
> The main body of the changes is here:
>
> http://cr.openjdk.java.net/~tonyp/7157073/webrev.0/webrev.1.G1Uints/
>
> Some important comments:
>
> * I tried to change as many of the size_t occurrences as possible but
> I didn't touch the following:
>
> - HeapRegionRemSet - we're in the process of reworking this code so I
> decided to leave it mostly as is (I only added a few necessary casts)
>
> - CollectionSetChooser / HeapRegion::sort_index() /
> HeapRegion::_sort_index - I have a CR open for a CSetChooser cleanup
> and I'll do the conversion as part of that cleanup (I did change a few
> types on the CSetChooser external API to avoid casts from methods that
> access it).
>
> - HeapRegion::_young_index_in_cset / HeapRegion::young_index_in_cset()
> - The code looks as if it relies on the fact that this is an int. It
> seems well localized so I left it as is and we can look at it on a
> separate CR.
>
> * I had to make some changes to the vmStructs_g1.hpp and I need to
> ensure that the SA code works with those changes. Unfortunately, I'm
> going on vacation for a few days tonight and I haven't had a chance to
> do that yet. I'll look at the SA more closely when I get back and, if
> I need to make any changes to the SA, I'll publish those separately
> (they will be self-contained anyway). I just wanted to get the main
> body of the changes out before I leave so any potential reviewers can
> get started on it.
>
> * Testing: the source builds on all platforms and passes JPRT. And I
> did a lot of extra 64-bit testing (as any issues should mainly show up
> in 64-bit builds).
>
> Tony
>
More information about the hotspot-gc-dev
mailing list