< prev index next >

src/hotspot/share/gc/shared/plab.cpp

Print this page
rev 48920 : [backport] Use PLAB for evacuations instead of TLAB
rev 48921 : [backport] Fix PLAB alignment reserve
rev 48922 : Fix unsigned comparison in plab.cpp

*** 42,52 **** PLAB::PLAB(size_t desired_plab_sz_) : _word_sz(desired_plab_sz_), _bottom(NULL), _top(NULL), _end(NULL), _hard_end(NULL), _allocated(0), _wasted(0), _undo_wasted(0) { // ArrayOopDesc::header_size depends on command line initialization. ! AlignmentReserve = oopDesc::header_size() > MinObjAlignment ? align_object_size(arrayOopDesc::header_size(T_INT)) : 0; assert(min_size() > AlignmentReserve, "Minimum PLAB size " SIZE_FORMAT " must be larger than alignment reserve " SIZE_FORMAT " " "to be able to contain objects", min_size(), AlignmentReserve); } --- 42,54 ---- PLAB::PLAB(size_t desired_plab_sz_) : _word_sz(desired_plab_sz_), _bottom(NULL), _top(NULL), _end(NULL), _hard_end(NULL), _allocated(0), _wasted(0), _undo_wasted(0) { // ArrayOopDesc::header_size depends on command line initialization. ! int rsv_regular = oopDesc::header_size() + (int) Universe::heap()->oop_extra_words(); ! int rsv_array = align_object_size(arrayOopDesc::header_size(T_INT) + Universe::heap()->oop_extra_words()); ! AlignmentReserve = rsv_regular > MinObjAlignment ? rsv_array : 0; assert(min_size() > AlignmentReserve, "Minimum PLAB size " SIZE_FORMAT " must be larger than alignment reserve " SIZE_FORMAT " " "to be able to contain objects", min_size(), AlignmentReserve); }
*** 80,97 **** } size_t PLAB::retire_internal() { size_t result = 0; if (_top < _hard_end) { ! CollectedHeap::fill_with_object(_top, _hard_end); result += invalidate(); } return result; } void PLAB::add_undo_waste(HeapWord* obj, size_t word_sz) { ! CollectedHeap::fill_with_object(obj, word_sz); _undo_wasted += word_sz; } void PLAB::undo_last_allocation(HeapWord* obj, size_t word_sz) { assert(pointer_delta(_top, _bottom) >= word_sz, "Bad undo"); --- 82,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");
< prev index next >