< prev index next >

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

Print this page

        

*** 39,49 **** 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!"); // 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; --- 39,50 ---- 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, ! 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,71 **** // 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); } --- 57,69 ----
*** 85,95 **** 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) { --- 83,92 ----
*** 129,138 **** --- 126,138 ---- 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 >