1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp Tue Nov 22 04:47:10 2011 -0500 1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp Tue Aug 09 10:16:01 2011 -0700 1.3 @@ -223,7 +223,8 @@ 1.4 MutableSpace* sp, 1.5 HeapWord* space_top, 1.6 PSPromotionManager* pm, 1.7 - uint stripe_number) { 1.8 + uint stripe_number, 1.9 + uint stripe_total) { 1.10 int ssize = 128; // Naked constant! Work unit = 64k. 1.11 int dirty_card_count = 0; 1.12 1.13 @@ -231,7 +232,11 @@ 1.14 jbyte* start_card = byte_for(sp->bottom()); 1.15 jbyte* end_card = byte_for(sp_top - 1) + 1; 1.16 oop* last_scanned = NULL; // Prevent scanning objects more than once 1.17 - for (jbyte* slice = start_card; slice < end_card; slice += ssize*ParallelGCThreads) { 1.18 + // The width of the stripe ssize*stripe_total must be 1.19 + // consistent with the number of stripes so that the complete slice 1.20 + // is covered. 1.21 + size_t slice_width = ssize * stripe_total; 1.22 + for (jbyte* slice = start_card; slice < end_card; slice += slice_width) { 1.23 jbyte* worker_start_card = slice + stripe_number * ssize; 1.24 if (worker_start_card >= end_card) 1.25 return; // We're done.