RFR: 8020277: Young GC could be extremely slow due to assertion in ObjectStartArray::object_starts_in_range
Stefan Johansson
stefan.johansson at oracle.com
Tue Jan 21 13:17:20 UTC 2014
Hi,
Can I have a couple of reviews for this fix for:
https://bugs.openjdk.java.net/browse/JDK-8020277
Webrev:
http://cr.openjdk.java.net/~sjohanss/8020277/webrev.00/
Summary:
There have been a couple of bugs filed about varying/slow gc times for
ParallelScavenge in debug builds. The reason for the slow down is an
assertion in object_starts_in_range() that tries to verify that the
range (mapping to one card) really doesn't have any objects starting in
it. The assertion uses object_start() to find the first object starting
before the end of the range. The reason for this being really slow is
that object_start() won't stop looking for an object until it finds it,
even if it's out of the range we're currently verifying. So on a heap
with many large objects that span more than one card, a lot of extra
work is done.
My proposed fix is to just remove this assertion. An alternative would
be to limit the verification to just check the range we are interested
in. I started looking at doing this but realized that such a limitation
would end up being very similar to what is currently done in
object_starts_in_range() and with this in mind I think we can just
remove the assertion. I checked JBS to see if there were many bugs
reported with this assertion as cause, but I only found this bug and
8009462 which also lists this assertion as the reason for slow GC times.
Testing:
* Manually verified that jit/graph/cgt10 doesn't hang anymore.
Thanks,
Stefan
More information about the hotspot-gc-dev
mailing list