RFR: 8075635 - Remove GenerationSpec array
Jesper Wilhelmsson
jesper.wilhelmsson at oracle.com
Tue Mar 24 16:27:18 UTC 2015
Hi Kim,
Thanks for reviewing!
A new webrev is available here:
http://cr.openjdk.java.net/~jwilhelm/8075635/webrev.01/hotspot/
Latest increment:
http://cr.openjdk.java.net/~jwilhelm/8075635/webrev.01/hotspot_incremental/
Comments inline.
Kim Barrett skrev den 23/3/15 22:59:
> On Mar 23, 2015, at 1:10 PM, Jesper Wilhelmsson <jesper.wilhelmsson at oracle.com> wrote:
>>
>> Hi,
>>
>> Please review another follow up after the generation array removal. In this change the array of generation specifications is reduced to two variables in the same way as was done for the generations.
>>
>> The reference to the genSpecs that was previously duplicated in GenCollectedHeap is now only available through the collector policy class.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8075635
>> Webrev: http://cr.openjdk.java.net/~jwilhelm/8075635/webrev.00
>
> ------------------------------------------------------------------------------
> src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp
> src/share/vm/memory/collectorPolicy.hpp
> src/share/vm/memory/generationSpec.hpp
>
> Needs copyright update.
Fixed.
> ------------------------------------------------------------------------------
> agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java
> 131 if (level == 0) {
> 132 return (GenerationSpec)
> 133 VMObjectFactory.newObject(GenerationSpec.class,
> 134 youngGenSpecField.getAddress());
> 135 } else {
> 136 return (GenerationSpec)
> 137 VMObjectFactory.newObject(GenerationSpec.class,
> 138 oldGenSpecField.getAddress());
> 139 }
>
> This is effectively assuming that nGens() == 2, but the earlier
> assertions in this function don't reflect that assumption. I realize
> there will probably be further cleanup in this area later, but I'd
> like things to be in a consistent state at each step in these
> incremental changes.
I changed the existing assert to look for 0 or 1 rather than using nGens(). This
is the same approach as we used in the last change that changed the assert in a
method a few lines above this one.
>
> Similar issue here:
> src/share/vm/memory/generation.cpp
> 67 return level() == 0 ? gch->gen_policy()->young_gen_spec() : gch->gen_policy()->old_gen_spec();
Same change here.
>
> ------------------------------------------------------------------------------
> src/share/vm/memory/genCollectedHeap.cpp
> 151 size_t total_reserved = young_spec->max_size() + old_spec->max_size();
> 152 if (total_reserved < young_spec->max_size() ||
> 153 total_reserved < old_spec->max_size()) {
>
> Not that it's all that important, but either of those comparisons
> alone should be sufficient to test for overflow. It might also be
> nice to leave a comment about this being a test for overflow.
Yes, you are right. You are most likely the first one to give this code enough
thought to realize this. Good catch! I cleaned up this code a bit in the new
version.
> ------------------------------------------------------------------------------
> src/share/vm/memory/generationSpec.hpp
> 42 GenerationSpec(Generation::Name name, size_t init_size, size_t max_size, size_t alignment) {
> 43 _name = name;
> 44 _init_size = align_size_up(init_size, alignment);
> 45 _max_size = align_size_up(max_size, alignment);
> 46 }
>
> I like that you've eliminated the separate post-construction init_size
> and max_size alignment step and are instead doing that in the
> constructor.
>
> Is there anything that ensures init_size <= max_size? Should there be
> an assertion to that effect here?
This is verified in the collector policy code where initial and max sizes are
set up. I wouldn't object to having an assert here if you feel strongly about
it. On the other hand we have a quite extensive set off asserts in
GenCollectorPolicy::assert_flags() and GenCollectorPolicy::assert_size_info() to
make sure this stuff is correct already.
>
> Also consider initializing members in ctor-initializer rather than
> assignments in the constructor body.
Fixed.
Thanks!
/Jesper
More information about the hotspot-gc-dev
mailing list