RFR: 8028498: runtime/SharedArchiveFile/CdsDifferentObjectAlignment.java asserts in RT_Baseline
Stefan Johansson
stefan.johansson at oracle.com
Wed Feb 12 09:12:48 PST 2014
Hi,
Stefan K pointed out to me that in the Metaspace code we use
is_init_completed() to verify that the VM is fully initialized. I
started looking at where we do set_init_completed() and realized that it
is right where we are ready to handle a GC. It makes sense to try to
minimize the different ways we check if the VM is fully initialized.
Using is_init_completed() instead of the GC locker to prevent GCs during
startup has another nice effect too; we can remove one of the two
different lock mechanisms in the GC locker.
The new proposal removes the use of GC_locker::lock()/unlock() which is
only used to prevent GCs during startup. Instead there is a check in the
GC operations prologue, to ensure that the VM is initialized when the GC
starts.
Please review the new the change:
http://cr.openjdk.java.net/~sjohanss/8028498/webrev.02/
Testing:
* JPRT
* GC locker test through UTE
Thanks,
Stefan
On 2014-02-11 16:12, Stefan Johansson wrote:
> Hi again =)
>
> Don't spend time on the current webrev (02). I've gotten some more
> comments on the proposed fix and will look at a solution that allow us
> to remove the GC locker usage during initialization.
>
> Cheers,
> Stefan
>
> On 2014-02-10 18:51, Stefan Johansson wrote:
>> Hi again,
>>
>> After a couple of offline discussions with different people I've come
>> to the conclusion to split out the sizing of the young generation
>> from the fix for this issue. I've created a new bug (JDK-8033426) for
>> that, which is currently out for review.
>>
>> The discussions also lead to a different approach for fixing this
>> issue. The new proposal is to use the GC locker to prevent GCs until
>> we are ready to handle them and otherwise fail the VM initialization.
>> The gc locker has two different mechanisms for locking out the GC,
>> one which is used during initialization and one used to stall GCs
>> when doing critical JNI work. The part of the initialization that
>> currently is locked by the GC locker is to narrow and there is no
>> guarantee that a GC can be handled after the GC locker is unlocked.
>> This fix will extend the part that is locked and also add a check
>> that if a GC is initiated while locked during startup the VM exits.
>>
>> New webrev:
>> http://cr.openjdk.java.net/~sjohanss/8028498/webrev.01/
>>
>> Thanks,
>> Stefan
>>
>> On 2014-01-29 14:54, Stefan Johansson wrote:
>>> Hi,
>>>
>>> Please review this fix for:
>>> https://bugs.openjdk.java.net/browse/JDK-8028498
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~sjohanss/8028498/webrev.00/
>>>
>>> Summary:
>>> The initial young generation size has been fairly small by default
>>> (1.5M) and if setting ObjectAlignmentInBytes to something larger
>>> than the default it can causes CDS to trigger a GC when dumping the
>>> archive. At this point the VM is not ready to handle a GC and we
>>> will hit an assertion. Making sure we can handle a GC at this point
>>> is not trivial and the proposed solution is to alter the default
>>> sizing of the young generation as well as adding a safety check when
>>> dumping the archive to exit the VM if the young generation is too
>>> small.
>>>
>>> Testing:
>>> * JPRT build and test passes
>>> * Failing test now passes on all platforms (tested throught JPRT)
>>> * Verified that the GC and Runtime jtreg tests still passes
>>>
>>> Cheers,
>>> Stefan
>>
>
More information about the hotspot-dev
mailing list