< prev index next >
src/hotspot/share/gc/shared/plab.cpp
Print this page
rev 50815 : Abstraction for TLAB dummy object
*** 84,103 ****
size_t PLAB::retire_internal() {
size_t result = 0;
if (_top < _hard_end) {
assert(pointer_delta(_hard_end, _top) >= (size_t)(oopDesc::header_size() + Universe::heap()->oop_extra_words()),
"better have enough space left to fill with dummy");
! HeapWord* obj = Universe::heap()->tlab_post_allocation_setup(_top);
! CollectedHeap::fill_with_object(obj, _hard_end);
result += invalidate();
}
return result;
}
void PLAB::add_undo_waste(HeapWord* obj, size_t word_sz) {
! HeapWord* head_obj = Universe::heap()->tlab_post_allocation_setup(obj);
! CollectedHeap::fill_with_object(head_obj, word_sz - (head_obj - obj));
_undo_wasted += word_sz;
}
void PLAB::undo_last_allocation(HeapWord* obj, size_t word_sz) {
assert(pointer_delta(_top, _bottom) >= word_sz, "Bad undo");
--- 84,101 ----
size_t PLAB::retire_internal() {
size_t result = 0;
if (_top < _hard_end) {
assert(pointer_delta(_hard_end, _top) >= (size_t)(oopDesc::header_size() + Universe::heap()->oop_extra_words()),
"better have enough space left to fill with dummy");
! Universe::heap()->fill_with_dummy_object(_top, _hard_end, false);
result += invalidate();
}
return result;
}
void PLAB::add_undo_waste(HeapWord* obj, size_t word_sz) {
! Universe::heap()->fill_with_dummy_object(obj, obj + word_sz, false);
_undo_wasted += word_sz;
}
void PLAB::undo_last_allocation(HeapWord* obj, size_t word_sz) {
assert(pointer_delta(_top, _bottom) >= word_sz, "Bad undo");
< prev index next >