Here's the "evaluation" from 6578335 during whose investigation
this problem was first diagnosed:
What we were doing is that if we overflowed the marking stack
when trying to push a newly marked (now grey) object encountered during
precleaning, we would just dirty the card the object (now marked)
lay on, with the expectation that a later precleaning pass or the final
remark phase (which would pick up all remaining dirty cards) would deal
with the object. But of course in the case of an object _array_,
preclean/remark would just scrub the dirty pages not the entire array,
so the part of the object array that protruded off the dirtied page
on to a possibly clean page would not be scanned and if that part
contained references to white objects, those would be lost.
The fix of course is in the case of overflown object arrays,
to dirty all the pages that the newly marked overflown object array
lies on when encoding its greyness for the purposes of rescan (by a
later preclean pass or the subsequent final remark).