< prev index next >

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

Print this page

        

*** 122,132 **** } void ParScanThreadState::scan_partial_array_and_push_remainder(oop old) { assert(old->is_objArray(), "must be obj array"); assert(old->is_forwarded(), "must be forwarded"); ! assert(GenCollectedHeap::heap()->is_in_reserved(old), "must be in heap."); assert(!old_gen()->is_in(old), "must be in young generation."); objArrayOop obj = objArrayOop(old->forwardee()); // Process ParGCArrayScanChunk elements now // and push the remainder back onto queue --- 122,132 ---- } void ParScanThreadState::scan_partial_array_and_push_remainder(oop old) { assert(old->is_objArray(), "must be obj array"); assert(old->is_forwarded(), "must be forwarded"); ! assert(CMSHeap::heap()->is_in_reserved(old), "must be in heap."); assert(!old_gen()->is_in(old), "must be in young generation."); objArrayOop obj = objArrayOop(old->forwardee()); // Process ParGCArrayScanChunk elements now // and push the remainder back onto queue
*** 203,215 **** // Transfer the most recent num_take_elems from the overflow // stack to our work queue. for (size_t i = 0; i != num_take_elems; i++) { oop cur = of_stack->pop(); oop obj_to_push = cur->forwardee(); ! assert(GenCollectedHeap::heap()->is_in_reserved(cur), "Should be in heap"); assert(!old_gen()->is_in_reserved(cur), "Should be in young gen"); ! assert(GenCollectedHeap::heap()->is_in_reserved(obj_to_push), "Should be in heap"); if (should_be_partially_scanned(obj_to_push, cur)) { assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned"); obj_to_push = cur; } bool ok = queue->push(obj_to_push); --- 203,215 ---- // Transfer the most recent num_take_elems from the overflow // stack to our work queue. for (size_t i = 0; i != num_take_elems; i++) { oop cur = of_stack->pop(); oop obj_to_push = cur->forwardee(); ! assert(CMSHeap::heap()->is_in_reserved(cur), "Should be in heap"); assert(!old_gen()->is_in_reserved(cur), "Should be in young gen"); ! assert(CMSHeap::heap()->is_in_reserved(obj_to_push), "Should be in heap"); if (should_be_partially_scanned(obj_to_push, cur)) { assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned"); obj_to_push = cur; } bool ok = queue->push(obj_to_push);
*** 586,596 **** _state_set(state_set), _strong_roots_scope(strong_roots_scope) {} void ParNewGenTask::work(uint worker_id) { ! GenCollectedHeap* gch = GenCollectedHeap::heap(); // Since this is being done in a separate thread, need new resource // and handle marks. ResourceMark rm; HandleMark hm; --- 586,596 ---- _state_set(state_set), _strong_roots_scope(strong_roots_scope) {} void ParNewGenTask::work(uint worker_id) { ! CMSHeap* heap = CMSHeap::heap(); // Since this is being done in a separate thread, need new resource // and handle marks. ResourceMark rm; HandleMark hm;
*** 598,614 **** assert(_state_set->is_valid(worker_id), "Should not have been called"); par_scan_state.set_young_old_boundary(_young_old_boundary); KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(), ! gch->rem_set()->klass_rem_set()); CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure, &par_scan_state.to_space_root_closure(), false); par_scan_state.start_strong_roots(); ! gch->young_process_roots(_strong_roots_scope, &par_scan_state.to_space_root_closure(), &par_scan_state.older_gen_closure(), &cld_scan_closure); par_scan_state.end_strong_roots(); --- 598,614 ---- assert(_state_set->is_valid(worker_id), "Should not have been called"); par_scan_state.set_young_old_boundary(_young_old_boundary); KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(), ! heap->rem_set()->klass_rem_set()); CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure, &par_scan_state.to_space_root_closure(), false); par_scan_state.start_strong_roots(); ! heap->young_process_roots(_strong_roots_scope, &par_scan_state.to_space_root_closure(), &par_scan_state.older_gen_closure(), &cld_scan_closure); par_scan_state.end_strong_roots();
*** 686,696 **** } #endif // ASSERT _par_cl->do_oop_nv(p); ! if (GenCollectedHeap::heap()->is_in_reserved(p)) { oop obj = oopDesc::load_decode_heap_oop_not_null(p); _rs->write_ref_field_gc_par(p, obj); } } --- 686,696 ---- } #endif // ASSERT _par_cl->do_oop_nv(p); ! if (CMSHeap::heap()->is_in_reserved(p)) { oop obj = oopDesc::load_decode_heap_oop_not_null(p); _rs->write_ref_field_gc_par(p, obj); } }
*** 713,723 **** } #endif // ASSERT _cl->do_oop_nv(p); ! if (GenCollectedHeap::heap()->is_in_reserved(p)) { oop obj = oopDesc::load_decode_heap_oop_not_null(p); _rs->write_ref_field_gc_par(p, obj); } } --- 713,723 ---- } #endif // ASSERT _cl->do_oop_nv(p); ! if (CMSHeap::heap()->is_in_reserved(p)) { oop obj = oopDesc::load_decode_heap_oop_not_null(p); _rs->write_ref_field_gc_par(p, obj); } }
*** 824,863 **** workers->run_task(&enq_task); } void ParNewRefProcTaskExecutor::set_single_threaded_mode() { _state_set.flush(); ! GenCollectedHeap* gch = GenCollectedHeap::heap(); ! gch->save_marks(); } ScanClosureWithParBarrier:: ScanClosureWithParBarrier(ParNewGeneration* g, bool gc_barrier) : ScanClosure(g, gc_barrier) { } EvacuateFollowersClosureGeneral:: ! EvacuateFollowersClosureGeneral(GenCollectedHeap* gch, OopsInGenClosure* cur, OopsInGenClosure* older) : ! _gch(gch), _scan_cur_or_nonheap(cur), _scan_older(older) { } void EvacuateFollowersClosureGeneral::do_void() { do { // Beware: this call will lead to closure applications via virtual // calls. ! _gch->oop_since_save_marks_iterate(GenCollectedHeap::YoungGen, _scan_cur_or_nonheap, _scan_older); ! } while (!_gch->no_allocs_since_save_marks()); } // A Generation that does parallel young-gen collection. ! void ParNewGeneration::handle_promotion_failed(GenCollectedHeap* gch, ParScanThreadStateSet& thread_state_set) { assert(_promo_failure_scan_stack.is_empty(), "post condition"); _promo_failure_scan_stack.clear(true); // Clear cached segments. remove_forwarding_pointers(); log_info(gc, promotion)("Promotion failed"); --- 824,863 ---- workers->run_task(&enq_task); } void ParNewRefProcTaskExecutor::set_single_threaded_mode() { _state_set.flush(); ! CMSHeap* heap = CMSHeap::heap(); ! heap->save_marks(); } ScanClosureWithParBarrier:: ScanClosureWithParBarrier(ParNewGeneration* g, bool gc_barrier) : ScanClosure(g, gc_barrier) { } EvacuateFollowersClosureGeneral:: ! EvacuateFollowersClosureGeneral(CMSHeap* heap, OopsInGenClosure* cur, OopsInGenClosure* older) : ! _heap(heap), _scan_cur_or_nonheap(cur), _scan_older(older) { } void EvacuateFollowersClosureGeneral::do_void() { do { // Beware: this call will lead to closure applications via virtual // calls. ! _heap->oop_since_save_marks_iterate(GenCollectedHeap::YoungGen, _scan_cur_or_nonheap, _scan_older); ! } while (!_heap->no_allocs_since_save_marks()); } // A Generation that does parallel young-gen collection. ! void ParNewGeneration::handle_promotion_failed(CMSHeap* gch, ParScanThreadStateSet& thread_state_set) { assert(_promo_failure_scan_stack.is_empty(), "post condition"); _promo_failure_scan_stack.clear(true); // Clear cached segments. remove_forwarding_pointers(); log_info(gc, promotion)("Promotion failed");
*** 1163,1173 **** old->forward_to(new_obj); forward_ptr = NULL; } else { // Is in to-space; do copying ourselves. Copy::aligned_disjoint_words((HeapWord*)old, (HeapWord*)new_obj, sz); ! assert(GenCollectedHeap::heap()->is_in_reserved(new_obj), "illegal forwarding pointer value."); forward_ptr = old->forward_to_atomic(new_obj); // Restore the mark word copied above. new_obj->set_mark(m); // Increment age if obj still in new generation new_obj->incr_age(); --- 1163,1173 ---- old->forward_to(new_obj); forward_ptr = NULL; } else { // Is in to-space; do copying ourselves. Copy::aligned_disjoint_words((HeapWord*)old, (HeapWord*)new_obj, sz); ! assert(CMSHeap::heap()->is_in_reserved(new_obj), "illegal forwarding pointer value."); forward_ptr = old->forward_to_atomic(new_obj); // Restore the mark word copied above. new_obj->set_mark(m); // Increment age if obj still in new generation new_obj->incr_age();
< prev index next >