While analysing performance data from benchmark runs using the changes in 6484965 (Piggy-back liveness accounting phase on marking) it was observed that there were a high number of mispredicted branches coming from CMTask::do_marking_step(). Further analysis indicated that these mispredicted branches were the actual call of the BitMap::iterate function. This is caused by a couple of reasons - first BitMap::iterate is defined in the .cpp file and so cannot be inlined. We might be able to do better by actually implementing a version of the "iterate" routine using inline-able routines from BitMap and using the object sizes to increase the granularity of the iteration.
|