< prev index next >

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

Print this page
rev 8978 : imported patch remove_err_msg


 575   do {                                                                    \
 576     t = top();                                                            \
 577     while (p < t) {                                                       \
 578       Prefetch::write(p, interval);                                       \
 579       debug_only(HeapWord* prev = p);                                     \
 580       oop m = oop(p);                                                     \
 581       p += m->oop_iterate_size(blk);                                      \
 582     }                                                                     \
 583   } while (t < top());                                                    \
 584                                                                           \
 585   set_saved_mark_word(p);                                                 \
 586 }
 587 
 588 ALL_SINCE_SAVE_MARKS_CLOSURES(ContigSpace_OOP_SINCE_SAVE_MARKS_DEFN)
 589 
 590 #undef ContigSpace_OOP_SINCE_SAVE_MARKS_DEFN
 591 
 592 // Very general, slow implementation.
 593 HeapWord* ContiguousSpace::block_start_const(const void* p) const {
 594   assert(MemRegion(bottom(), end()).contains(p),
 595          err_msg("p (" PTR_FORMAT ") not in space [" PTR_FORMAT ", " PTR_FORMAT ")",
 596                   p2i(p), p2i(bottom()), p2i(end())));
 597   if (p >= top()) {
 598     return top();
 599   } else {
 600     HeapWord* last = bottom();
 601     HeapWord* cur = last;
 602     while (cur <= p) {
 603       last = cur;
 604       cur += oop(cur)->size();
 605     }
 606     assert(oop(last)->is_oop(),
 607            err_msg(PTR_FORMAT " should be an object start", p2i(last)));
 608     return last;
 609   }
 610 }
 611 
 612 size_t ContiguousSpace::block_size(const HeapWord* p) const {
 613   assert(MemRegion(bottom(), end()).contains(p),
 614          err_msg("p (" PTR_FORMAT ") not in space [" PTR_FORMAT ", " PTR_FORMAT ")",
 615                   p2i(p), p2i(bottom()), p2i(end())));
 616   HeapWord* current_top = top();
 617   assert(p <= current_top,
 618          err_msg("p > current top - p: " PTR_FORMAT ", current top: " PTR_FORMAT,
 619                   p2i(p), p2i(current_top)));
 620   assert(p == current_top || oop(p)->is_oop(),
 621          err_msg("p (" PTR_FORMAT ") is not a block start - "
 622                  "current_top: " PTR_FORMAT ", is_oop: %s",
 623                  p2i(p), p2i(current_top), BOOL_TO_STR(oop(p)->is_oop())));
 624   if (p < current_top) {
 625     return oop(p)->size();
 626   } else {
 627     assert(p == current_top, "just checking");
 628     return pointer_delta(end(), (HeapWord*) p);
 629   }
 630 }
 631 
 632 // This version requires locking.
 633 inline HeapWord* ContiguousSpace::allocate_impl(size_t size) {
 634   assert(Heap_lock->owned_by_self() ||
 635          (SafepointSynchronize::is_at_safepoint() && Thread::current()->is_VM_thread()),
 636          "not locked");
 637   HeapWord* obj = top();
 638   if (pointer_delta(end(), obj) >= size) {
 639     HeapWord* new_top = obj + size;
 640     set_top(new_top);
 641     assert(is_aligned(obj) && is_aligned(new_top), "checking alignment");
 642     return obj;
 643   } else {




 575   do {                                                                    \
 576     t = top();                                                            \
 577     while (p < t) {                                                       \
 578       Prefetch::write(p, interval);                                       \
 579       debug_only(HeapWord* prev = p);                                     \
 580       oop m = oop(p);                                                     \
 581       p += m->oop_iterate_size(blk);                                      \
 582     }                                                                     \
 583   } while (t < top());                                                    \
 584                                                                           \
 585   set_saved_mark_word(p);                                                 \
 586 }
 587 
 588 ALL_SINCE_SAVE_MARKS_CLOSURES(ContigSpace_OOP_SINCE_SAVE_MARKS_DEFN)
 589 
 590 #undef ContigSpace_OOP_SINCE_SAVE_MARKS_DEFN
 591 
 592 // Very general, slow implementation.
 593 HeapWord* ContiguousSpace::block_start_const(const void* p) const {
 594   assert(MemRegion(bottom(), end()).contains(p),
 595          "p (" PTR_FORMAT ") not in space [" PTR_FORMAT ", " PTR_FORMAT ")",
 596          p2i(p), p2i(bottom()), p2i(end()));
 597   if (p >= top()) {
 598     return top();
 599   } else {
 600     HeapWord* last = bottom();
 601     HeapWord* cur = last;
 602     while (cur <= p) {
 603       last = cur;
 604       cur += oop(cur)->size();
 605     }
 606     assert(oop(last)->is_oop(),PTR_FORMAT " should be an object start", p2i(last));

 607     return last;
 608   }
 609 }
 610 
 611 size_t ContiguousSpace::block_size(const HeapWord* p) const {
 612   assert(MemRegion(bottom(), end()).contains(p),
 613          "p (" PTR_FORMAT ") not in space [" PTR_FORMAT ", " PTR_FORMAT ")",
 614          p2i(p), p2i(bottom()), p2i(end()));
 615   HeapWord* current_top = top();
 616   assert(p <= current_top,
 617          "p > current top - p: " PTR_FORMAT ", current top: " PTR_FORMAT,
 618          p2i(p), p2i(current_top));
 619   assert(p == current_top || oop(p)->is_oop(),
 620          "p (" PTR_FORMAT ") is not a block start - "
 621          "current_top: " PTR_FORMAT ", is_oop: %s",
 622          p2i(p), p2i(current_top), BOOL_TO_STR(oop(p)->is_oop()));
 623   if (p < current_top) {
 624     return oop(p)->size();
 625   } else {
 626     assert(p == current_top, "just checking");
 627     return pointer_delta(end(), (HeapWord*) p);
 628   }
 629 }
 630 
 631 // This version requires locking.
 632 inline HeapWord* ContiguousSpace::allocate_impl(size_t size) {
 633   assert(Heap_lock->owned_by_self() ||
 634          (SafepointSynchronize::is_at_safepoint() && Thread::current()->is_VM_thread()),
 635          "not locked");
 636   HeapWord* obj = top();
 637   if (pointer_delta(end(), obj) >= size) {
 638     HeapWord* new_top = obj + size;
 639     set_top(new_top);
 640     assert(is_aligned(obj) && is_aligned(new_top), "checking alignment");
 641     return obj;
 642   } else {


< prev index next >