RFR: JDK-8077842 - Remove the level parameter passed around in GenCollectedHeap

Kim Barrett kim.barrett at oracle.com
Mon Jun 1 17:38:55 UTC 2015


On May 28, 2015, at 11:57 AM, Jesper Wilhelmsson <jesper.wilhelmsson at oracle.com> wrote:
> 
> Hi,
> 
> Another non-trivial merge later the webrev looks like this:
> 
> http://cr.openjdk.java.net/~jwilhelm/8077842/webrev.04
> 
> I reran all the tests and it turned out that the new assert in defNewGeneration.cpp was assuming that the generations were set up, which was not true at startup. So I have changed the assert to:
> 
> +DefNewGeneration::IsAliveClosure::IsAliveClosure(Generation* young_gen) : _young_gen(young_gen) {
> +  assert(_young_gen->kind() == Generation::ParNew ||
> +         _young_gen->kind() == Generation::DefNew, "Expected the young generation here");
> 
> This is more like the old assert that also looked at the properties of the generation itself:
> 
> -DefNewGeneration::IsAliveClosure::IsAliveClosure(Generation* g) : _g(g) {
> -  assert(g->level() == 0, "Optimized for youngest gen.");
> 
> Compared to the other webrevs this is the only change modulo some code that was removed by recent changes and didn't need to be changed any more.
> 
> Still need a Reviewer to have a look at this.
> 
> Thanks,
> /Jesper

------------------------------------------------------------------------------
src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp

Much of the reformatting around lines 804-814 will collide with Bill's
addition of spaces around xxx_FORMAT macros.  It might be simpler for
which ever of you pushes second if unrelated reformatting were not
part of this change set.

------------------------------------------------------------------------------
src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp
5645   bool current_is_young = (current_generation == GenCollectedHeap::heap()->young_gen());

Mikael suggested using the Generation::Type enum here.  There are
quite a few expressions like this; maybe there should be is_young_gen
and is_old_gen predicates?  To be similar in behavior they should
perhaps be heap functions, e.g. heap->is_young_gen(generation).  But
since old/young gens are each singletons, could instead be intrinsic
to the generation, e.g. generation->is_young_gen().  I don't see
anything that directly allows determination of the Generation::Type of
a generation though.  And maybe that's intentional, as part of moving
away from anything like "level"?

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




More information about the hotspot-gc-dev mailing list