< prev index next >

src/share/vm/gc/shared/space.cpp

Print this page
rev 12906 : [mq]: gc_interface

*** 46,56 **** HeapWord* DirtyCardToOopClosure::get_actual_top(HeapWord* top, HeapWord* top_obj) { if (top_obj != NULL) { if (_sp->block_is_obj(top_obj)) { ! if (_precision == CardTableModRefBS::ObjHeadPreciseArray) { if (oop(top_obj)->is_objArray() || oop(top_obj)->is_typeArray()) { // An arrayOop is starting on the dirty card - since we do exact // store checks for objArrays we are done. } else { // Otherwise, it is possible that the object starting on the dirty --- 46,56 ---- HeapWord* DirtyCardToOopClosure::get_actual_top(HeapWord* top, HeapWord* top_obj) { if (top_obj != NULL) { if (_sp->block_is_obj(top_obj)) { ! if (_precision == CardTable::ObjHeadPreciseArray) { if (oop(top_obj)->is_objArray() || oop(top_obj)->is_typeArray()) { // An arrayOop is starting on the dirty card - since we do exact // store checks for objArrays we are done. } else { // Otherwise, it is possible that the object starting on the dirty
*** 122,136 **** HeapWord* last = mr.last(); HeapWord* top = mr.end(); HeapWord* bottom_obj; HeapWord* top_obj; ! assert(_precision == CardTableModRefBS::ObjHeadPreciseArray || ! _precision == CardTableModRefBS::Precise, "Only ones we deal with for now."); ! assert(_precision != CardTableModRefBS::ObjHeadPreciseArray || _cl->idempotent() || _last_bottom == NULL || top <= _last_bottom, "Not decreasing"); NOT_PRODUCT(_last_bottom = mr.start()); --- 122,136 ---- HeapWord* last = mr.last(); HeapWord* top = mr.end(); HeapWord* bottom_obj; HeapWord* top_obj; ! assert(_precision == CardTable::ObjHeadPreciseArray || ! _precision == CardTable::Precise, "Only ones we deal with for now."); ! assert(_precision != CardTable::ObjHeadPreciseArray || _cl->idempotent() || _last_bottom == NULL || top <= _last_bottom, "Not decreasing"); NOT_PRODUCT(_last_bottom = mr.start());
*** 144,154 **** // the start of the object at the top, get the actual // value of the top. top = get_actual_top(top, top_obj); // If the previous call did some part of this region, don't redo. ! if (_precision == CardTableModRefBS::ObjHeadPreciseArray && _min_done != NULL && _min_done < top) { top = _min_done; } --- 144,154 ---- // the start of the object at the top, get the actual // value of the top. top = get_actual_top(top, top_obj); // If the previous call did some part of this region, don't redo. ! if (_precision == CardTable::ObjHeadPreciseArray && _min_done != NULL && _min_done < top) { top = _min_done; }
*** 156,166 **** // e.g. the dirty card region is entirely in a now free object // -- something that could happen with a concurrent sweeper. bottom = MIN2(bottom, top); MemRegion extended_mr = MemRegion(bottom, top); assert(bottom <= top && ! (_precision != CardTableModRefBS::ObjHeadPreciseArray || _min_done == NULL || top <= _min_done), "overlap!"); // Walk the region if it is not empty; otherwise there is nothing to do. --- 156,166 ---- // e.g. the dirty card region is entirely in a now free object // -- something that could happen with a concurrent sweeper. bottom = MIN2(bottom, top); MemRegion extended_mr = MemRegion(bottom, top); assert(bottom <= top && ! (_precision != CardTable::ObjHeadPreciseArray || _min_done == NULL || top <= _min_done), "overlap!"); // Walk the region if it is not empty; otherwise there is nothing to do.
*** 177,196 **** "Don't update _min_done for idempotent cl"); } } DirtyCardToOopClosure* Space::new_dcto_cl(ExtendedOopClosure* cl, ! CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary, bool parallel) { return new DirtyCardToOopClosure(this, cl, precision, boundary); } HeapWord* ContiguousSpaceDCTOC::get_actual_top(HeapWord* top, HeapWord* top_obj) { if (top_obj != NULL && top_obj < (_sp->toContiguousSpace())->top()) { ! if (_precision == CardTableModRefBS::ObjHeadPreciseArray) { if (oop(top_obj)->is_objArray() || oop(top_obj)->is_typeArray()) { // An arrayOop is starting on the dirty card - since we do exact // store checks for objArrays we are done. } else { // Otherwise, it is possible that the object starting on the dirty --- 177,196 ---- "Don't update _min_done for idempotent cl"); } } DirtyCardToOopClosure* Space::new_dcto_cl(ExtendedOopClosure* cl, ! CardTable::PrecisionStyle precision, HeapWord* boundary, bool parallel) { return new DirtyCardToOopClosure(this, cl, precision, boundary); } HeapWord* ContiguousSpaceDCTOC::get_actual_top(HeapWord* top, HeapWord* top_obj) { if (top_obj != NULL && top_obj < (_sp->toContiguousSpace())->top()) { ! if (_precision == CardTable::ObjHeadPreciseArray) { if (oop(top_obj)->is_objArray() || oop(top_obj)->is_typeArray()) { // An arrayOop is starting on the dirty card - since we do exact // store checks for objArrays we are done. } else { // Otherwise, it is possible that the object starting on the dirty
*** 257,267 **** ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(ExtendedOopClosure) ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(FilteringClosure) DirtyCardToOopClosure* ContiguousSpace::new_dcto_cl(ExtendedOopClosure* cl, ! CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary, bool parallel) { return new ContiguousSpaceDCTOC(this, cl, precision, boundary); } --- 257,267 ---- ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(ExtendedOopClosure) ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(FilteringClosure) DirtyCardToOopClosure* ContiguousSpace::new_dcto_cl(ExtendedOopClosure* cl, ! CardTable::PrecisionStyle precision, HeapWord* boundary, bool parallel) { return new ContiguousSpaceDCTOC(this, cl, precision, boundary); }
< prev index next >