Request for review (s) - 8015851 :UseAdaptiveGCBoundary is broken
Jon Masamitsu
jon.masamitsu at oracle.com
Fri Jun 7 17:02:38 UTC 2013
On 6/7/2013 2:21 AM, Bengt Rutisson wrote:
>
> Hi Jon,
>
> On 6/6/13 2:25 AM, Jon Masamitsu wrote:
>> Fixed the CR # in the subject.
>>
>> On 6/5/2013 1:27 PM, Jon Masamitsu wrote:
>>> A recent changeset effectively removed the initialization of
>>> performance counters used by the option UseAdaptiveGCBoundary
>
> Which change broke the initialization of the performance counters?
I didn't track down the particular changeset. The breakage was reported to
me on the latest build. I can hunt it down if you like.
>
> One comment:
>
> The code you add in ASPSOldGen::initialize_work() is very similar to
> the code in PSOldGen::initialize(). The PSOldGen::initialize() method
> is called from one (why not both?!?!) of the constructors for
> PSOldGen, which means that it is called from one of the ASPSOldGen
> constructors. But these constructors seem to be unused. Would it be
> possible to move your code from ASPSOldGen::initialize_work() in to
> the constructor of PSOldGen that is actually used?
The short answer is that I can move the code in
ASPSOldGen::initialize_work() into
the 2nd PSOldGen that does no initialization. And will.
For why ASPSOldGen::initialize_work() and PSOldGen::initialize() are
similar but
different and about the PSOldGen constructors (which I think are both
actually used).
Many (maybe most) of the Generation types have constructors that take a
ReservedSpace
and initialize based on the ReserveSpace. ASPSOldGen and ASPSYoungGen
share a
ReservedSpace. I thought that passing in the addresses and sizes of the
part of the
ReservedSpace to be used by each generation (ASPSOldGen and ASPSYoungGen)
was more transparent than to pass the ReservedSpace to each generation and
let each generation take a piece. That is, I thought that doing the
division of
the space in the ReservedSpace intended for each generation in the code
where
each generation was created was better (a single spot) than having it in two
separate places (the constructors for the generation). So there is a
difference
between how PSOldGen and ASPSOldGen are initialized so using
PSOldGen::initialize()
with ASPSOldGen doesn't work without so additional refactoring.
I removed one of the constructors for ASPSOldGen in the cleanups so
there is only
ASPSOldGen(PSVirtualSpace* vs,
size_t initial_byte_size,
size_t minimum_byte_size,
size_t byte_size_limit,
const char* gen_name, int level);
which explicitly uses
PSOldGen(size_t initial_size, size_t min_size, size_t max_size,
const char* perf_data_name, int level);
which is the constructor that does not do the initialization.
Thanks for looking at this and for the suggection about moving the code
into the 2nd PSOldGen constructor.
Jon
>
> Thanks,
> Bengt
>
>>>
>>> This changeset is built on top of the one for 8014546 and the
>>> webrev comes in two parts.
>>>
>>> The fix plus the test
>>>
>>> http://cr.openjdk.java.net/~jmasa/8015851/webrev.00/
>>>
>>> Some cleanups of the code
>>>
>>> http://cr.openjdk.java.net/~jmasa/8015851/webrev_refactor.00/
>>>
>>> Thanks.
>>>
>>> Jon
>>
>
More information about the hotspot-gc-dev
mailing list