hotspot/src/share/vm/gc/shared/space.cpp
changeset 32606 fdaa30d06ada
parent 30870 3050fdcdc60b
child 33105 294e48b4f704
equal deleted inserted replaced
32605:dab0de4ff7ff 32606:fdaa30d06ada
   235 #define ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(ClosureType) \
   235 #define ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(ClosureType) \
   236 void ContiguousSpaceDCTOC::walk_mem_region_with_cl(MemRegion mr,        \
   236 void ContiguousSpaceDCTOC::walk_mem_region_with_cl(MemRegion mr,        \
   237                                                    HeapWord* bottom,    \
   237                                                    HeapWord* bottom,    \
   238                                                    HeapWord* top,       \
   238                                                    HeapWord* top,       \
   239                                                    ClosureType* cl) {   \
   239                                                    ClosureType* cl) {   \
   240   bottom += oop(bottom)->oop_iterate(cl, mr);                           \
   240   bottom += oop(bottom)->oop_iterate_size(cl, mr);                      \
   241   if (bottom < top) {                                                   \
   241   if (bottom < top) {                                                   \
   242     HeapWord* next_obj = bottom + oop(bottom)->size();                  \
   242     HeapWord* next_obj = bottom + oop(bottom)->size();                  \
   243     while (next_obj < top) {                                            \
   243     while (next_obj < top) {                                            \
   244       /* Bottom lies entirely below top, so we can call the */          \
   244       /* Bottom lies entirely below top, so we can call the */          \
   245       /* non-memRegion version of oop_iterate below. */                 \
   245       /* non-memRegion version of oop_iterate below. */                 \
   506   void ContiguousSpace::par_oop_iterate(MemRegion mr, OopClosureType* blk) {\
   506   void ContiguousSpace::par_oop_iterate(MemRegion mr, OopClosureType* blk) {\
   507     HeapWord* obj_addr = mr.start();                                        \
   507     HeapWord* obj_addr = mr.start();                                        \
   508     HeapWord* t = mr.end();                                                 \
   508     HeapWord* t = mr.end();                                                 \
   509     while (obj_addr < t) {                                                  \
   509     while (obj_addr < t) {                                                  \
   510       assert(oop(obj_addr)->is_oop(), "Should be an oop");                  \
   510       assert(oop(obj_addr)->is_oop(), "Should be an oop");                  \
   511       obj_addr += oop(obj_addr)->oop_iterate(blk);                          \
   511       obj_addr += oop(obj_addr)->oop_iterate_size(blk);                     \
   512     }                                                                       \
   512     }                                                                       \
   513   }
   513   }
   514 
   514 
   515   ALL_PAR_OOP_ITERATE_CLOSURES(ContigSpace_PAR_OOP_ITERATE_DEFN)
   515   ALL_PAR_OOP_ITERATE_CLOSURES(ContigSpace_PAR_OOP_ITERATE_DEFN)
   516 
   516 
   521   if (is_empty()) return;
   521   if (is_empty()) return;
   522   HeapWord* obj_addr = bottom();
   522   HeapWord* obj_addr = bottom();
   523   HeapWord* t = top();
   523   HeapWord* t = top();
   524   // Could call objects iterate, but this is easier.
   524   // Could call objects iterate, but this is easier.
   525   while (obj_addr < t) {
   525   while (obj_addr < t) {
   526     obj_addr += oop(obj_addr)->oop_iterate(blk);
   526     obj_addr += oop(obj_addr)->oop_iterate_size(blk);
   527   }
   527   }
   528 }
   528 }
   529 
   529 
   530 void ContiguousSpace::object_iterate(ObjectClosure* blk) {
   530 void ContiguousSpace::object_iterate(ObjectClosure* blk) {
   531   if (is_empty()) return;
   531   if (is_empty()) return;
   576     t = top();                                                            \
   576     t = top();                                                            \
   577     while (p < t) {                                                       \
   577     while (p < t) {                                                       \
   578       Prefetch::write(p, interval);                                       \
   578       Prefetch::write(p, interval);                                       \
   579       debug_only(HeapWord* prev = p);                                     \
   579       debug_only(HeapWord* prev = p);                                     \
   580       oop m = oop(p);                                                     \
   580       oop m = oop(p);                                                     \
   581       p += m->oop_iterate(blk);                                           \
   581       p += m->oop_iterate_size(blk);                                      \
   582     }                                                                     \
   582     }                                                                     \
   583   } while (t < top());                                                    \
   583   } while (t < top());                                                    \
   584                                                                           \
   584                                                                           \
   585   set_saved_mark_word(p);                                                 \
   585   set_saved_mark_word(p);                                                 \
   586 }
   586 }