< prev index next >

src/share/vm/gc/cms/parCardTableModRefBS.cpp

Print this page

        

@@ -39,11 +39,12 @@
 void CardTableModRefBS::non_clean_card_iterate_parallel_work(Space* sp, MemRegion mr,
                                                              OopsInGenClosure* cl,
                                                              CardTableRS* ct,
                                                              uint n_threads) {
   assert(n_threads > 0, "Error: expected n_threads > 0");
-  assert(n_threads <= (uint)ParallelGCThreads, "# worker threads != # requested!");
+  assert(n_threads <= (uint)ParallelGCThreads,
+         err_msg("Error: n_threads: %u > ParallelGCThreads: %u", n_threads, (uint)ParallelGCThreads));
 
   // Make sure the LNC array is valid for the space.
   jbyte**   lowest_non_clean;
   uintptr_t lowest_non_clean_base_chunk_index;
   size_t    lowest_non_clean_chunk_size;

@@ -56,16 +57,13 @@
   // Sets the condition for completion of the subtask (how many threads
   // need to finish in order to be done).
   pst->set_n_threads(n_threads);
   pst->set_n_tasks(n_strides);
 
-  bool parallel = n_threads > 0;
-
   uint stride = 0;
   while (!pst->is_task_claimed(/* reference */ stride)) {
     process_stride(sp, mr, stride, n_strides,
-                       parallel,
                    cl, ct,
                    lowest_non_clean,
                    lowest_non_clean_base_chunk_index,
                    lowest_non_clean_chunk_size);
   }

@@ -85,11 +83,10 @@
 void
 CardTableModRefBS::
 process_stride(Space* sp,
                MemRegion used,
                jint stride, int n_strides,
-               bool parallel,
                OopsInGenClosure* cl,
                CardTableRS* ct,
                jbyte** lowest_non_clean,
                uintptr_t lowest_non_clean_base_chunk_index,
                size_t    lowest_non_clean_chunk_size) {

@@ -129,10 +126,13 @@
                                          chunk_card_end >= end_card ?
                                            used.end() : addr_for(chunk_card_end));
     assert(chunk_mr.word_size() > 0, "[chunk_card_start > used_end)");
     assert(used.contains(chunk_mr), "chunk_mr should be subset of used");
 
+    // This function is used by the parallel card table iteration.
+    const bool parallel = true;
+
     DirtyCardToOopClosure* dcto_cl = sp->new_dcto_cl(cl, precision(),
                                                      cl->gen_boundary(),
                                                      parallel);
     ClearNoncleanCardWrapper clear_cl(dcto_cl, ct, parallel);
 
< prev index next >