< prev index next >
src/share/vm/gc/shared/cardTableRS.cpp
Print this page
@@ -100,13 +100,14 @@
set_cur_youngergen_card_val(youngergen_card);
}
}
void CardTableRS::younger_refs_iterate(Generation* g,
- OopsInGenClosure* blk) {
+ OopsInGenClosure* blk,
+ uint n_threads) {
_last_cur_val_in_gen[g->level()+1] = cur_youngergen_card_val();
- g->younger_refs_iterate(blk);
+ g->younger_refs_iterate(blk, n_threads);
}
inline bool ClearNoncleanCardWrapper::clear_card(jbyte* entry) {
if (_is_par) {
return clear_card_parallel(entry);
@@ -162,19 +163,12 @@
*entry = CardTableRS::clean_card_val();
return true;
}
ClearNoncleanCardWrapper::ClearNoncleanCardWrapper(
- DirtyCardToOopClosure* dirty_card_closure, CardTableRS* ct) :
- _dirty_card_closure(dirty_card_closure), _ct(ct) {
- // Cannot yet substitute active_workers for n_par_threads
- // in the case where parallelism is being turned off by
- // setting n_par_threads to 0.
- _is_par = (GenCollectedHeap::heap()->n_par_threads() > 0);
- assert(!_is_par ||
- (GenCollectedHeap::heap()->n_par_threads() ==
- GenCollectedHeap::heap()->workers()->active_workers()), "Mismatch");
+ DirtyCardToOopClosure* dirty_card_closure, CardTableRS* ct, bool is_par) :
+ _dirty_card_closure(dirty_card_closure), _ct(ct), _is_par(is_par) {
}
bool ClearNoncleanCardWrapper::is_word_aligned(jbyte* entry) {
return (((intptr_t)entry) & (BytesPerWord-1)) == 0;
}
@@ -270,11 +264,12 @@
}
} while (true);
}
void CardTableRS::younger_refs_in_space_iterate(Space* sp,
- OopsInGenClosure* cl) {
+ OopsInGenClosure* cl,
+ uint n_threads) {
const MemRegion urasm = sp->used_region_at_save_marks();
#ifdef ASSERT
// Convert the assertion check to a warning if we are running
// CMS+ParNew until related bug is fixed.
MemRegion ur = sp->used_region();
@@ -299,11 +294,11 @@
warning("CMS+ParNew: Flickering used_region_at_save_marks()!!");
}
ShouldNotReachHere();
}
#endif
- _ct_bs->non_clean_card_iterate_possibly_parallel(sp, urasm, cl, this);
+ _ct_bs->non_clean_card_iterate_possibly_parallel(sp, urasm, cl, this, n_threads);
}
void CardTableRS::clear_into_younger(Generation* old_gen) {
assert(old_gen->level() == 1, "Should only be called for the old generation");
// The card tables for the youngest gen need never be cleared.
< prev index next >