Improve the card table scan.

Instead of scanning the table on card at a time, leverage a few
observations to make the scan somewhat more efficient.  First, fewer
than 1% of cards are dirtied during the concurrent mark.  We can scan
the card table by words instead of inspecting cards individually.
Second, dirtied cards tend to appear in clusters and are often
adjacent to one another.  Instead of starting scans at each dirty
card, we scan the objects on consecutive cards together by resuming
the scan at the lowest address visited.

I have not been able to get good profiling data from the VM so I am
not sure how much this helps.  This code may need some refining once
we get our hands on applications with larger heaps.

Change-Id: I30bc6bb14bc268fe404bc1629e44247f1ef8a6f2
1 file changed