src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp

changeset 3294
bca17e38de00
parent 2314
f95d63e2154a
child 3712
dde53abda3d6
     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.

mercurial