Review request (S): 7021322: assert(object_end <= top()) failed: Object crosses promotion LAB boundary

Stefan Karlsson stefan.karlsson at oracle.com
Mon Sep 12 13:49:34 PDT 2011


http://cr.openjdk.java.net/~stefank/7021322/webrev/

There's a bug in parallel scavenge when array chunking is used. After a 
thread has succeeded in forwarding the pointer to a newly copied array, 
it might change the length of the old object. This is done as a part of 
the load balancing.
If another thread races with the forwarding thread, it might read the 
incorrect array length and copy just a part of the array. When it later 
sees that the object has already been forwarded and calls 
unallocate_object, it uses the original length of the array to determine 
the size to unallocate.

The fix is to pass the actual amount of memory that was allocated, to 
unallocate_object.

Tested with the failing test.

StefanK


More information about the hotspot-gc-dev mailing list