< prev index next >

src/hotspot/share/gc/shared/threadLocalAllocBuffer.hpp

Print this page
rev 49643 : [mq]: heap8
rev 49644 : [mq]: event_rebased
rev 49649 : [mq]: heap14

*** 36,58 **** // the threads for allocation. // It is thread-private at any time, but maybe multiplexed over // time across multiple threads. The park()/unpark() pair is // used to make it available for such multiplexing. // ! // Heap sampling is performed via the current_end/allocation_end // fields. // allocation_end contains the real end of the tlab allocation, ! // whereas current_end can be set to an arbitrary spot in the tlab to // trip the return and sample the allocation. class ThreadLocalAllocBuffer: public CHeapObj<mtThread> { friend class VMStructs; friend class JVMCIVMStructs; private: HeapWord* _start; // address of TLAB HeapWord* _top; // address after last allocation HeapWord* _pf_top; // allocation prefetch watermark ! HeapWord* _current_end; // allocation end (can be the sampling end point or _allocation_end) HeapWord* _allocation_end; // end for allocations (actual TLAB end, excluding alignment_reserve) size_t _desired_size; // desired size (including alignment_reserve) size_t _refill_waste_limit; // hold onto tlab if free() is larger than this size_t _allocated_before_last_gc; // total bytes allocated up until the last gc --- 36,58 ---- // the threads for allocation. // It is thread-private at any time, but maybe multiplexed over // time across multiple threads. The park()/unpark() pair is // used to make it available for such multiplexing. // ! // Heap sampling is performed via the fast_path_end/allocation_end // fields. // allocation_end contains the real end of the tlab allocation, ! // whereas fast_path_end can be set to an arbitrary spot in the tlab to // trip the return and sample the allocation. class ThreadLocalAllocBuffer: public CHeapObj<mtThread> { friend class VMStructs; friend class JVMCIVMStructs; private: HeapWord* _start; // address of TLAB HeapWord* _top; // address after last allocation HeapWord* _pf_top; // allocation prefetch watermark ! HeapWord* _fast_path_end; // allocation end (can be the sampling end point or _allocation_end) HeapWord* _allocation_end; // end for allocations (actual TLAB end, excluding alignment_reserve) size_t _desired_size; // desired size (including alignment_reserve) size_t _refill_waste_limit; // hold onto tlab if free() is larger than this size_t _allocated_before_last_gc; // total bytes allocated up until the last gc
*** 72,82 **** void accumulate_statistics(); void initialize_statistics(); void set_start(HeapWord* start) { _start = start; } ! void set_current_end(HeapWord* current_end) { _current_end = current_end; } void set_allocation_end(HeapWord* ptr) { _allocation_end = ptr; } void set_top(HeapWord* top) { _top = top; } void set_pf_top(HeapWord* pf_top) { _pf_top = pf_top; } void set_desired_size(size_t desired_size) { _desired_size = desired_size; } void set_refill_waste_limit(size_t waste) { _refill_waste_limit = waste; } --- 72,82 ---- void accumulate_statistics(); void initialize_statistics(); void set_start(HeapWord* start) { _start = start; } ! void set_fast_path_end(HeapWord* fast_path_end){ _fast_path_end = fast_path_end; } void set_allocation_end(HeapWord* ptr) { _allocation_end = ptr; } void set_top(HeapWord* top) { _top = top; } void set_pf_top(HeapWord* pf_top) { _pf_top = pf_top; } void set_desired_size(size_t desired_size) { _desired_size = desired_size; } void set_refill_waste_limit(size_t waste) { _refill_waste_limit = waste; }
*** 92,102 **** void reset(); // Resize based on amount of allocation, etc. void resize(); ! void invariants() const { assert(top() >= start() && top() <= current_end(), "invalid tlab"); } void initialize(HeapWord* start, HeapWord* top, HeapWord* end); void print_stats(const char* tag); --- 92,102 ---- void reset(); // Resize based on amount of allocation, etc. void resize(); ! void invariants() const { assert(top() >= start() && top() <= fast_path_end(), "invalid tlab"); } void initialize(HeapWord* start, HeapWord* top, HeapWord* end); void print_stats(const char* tag);
*** 122,139 **** static size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; } static size_t max_size_in_bytes() { return max_size() * BytesPerWord; } static void set_max_size(size_t max_size) { _max_size = max_size; } HeapWord* start() const { return _start; } ! HeapWord* current_end() const { return _current_end; } HeapWord* top() const { return _top; } ! HeapWord* reserved_end(); HeapWord* pf_top() const { return _pf_top; } size_t desired_size() const { return _desired_size; } size_t used() const { return pointer_delta(top(), start()); } size_t used_bytes() const { return pointer_delta(top(), start(), 1); } ! size_t free() const { return pointer_delta(current_end(), top()); } // Don't discard tlab if remaining space is larger than this. size_t refill_waste_limit() const { return _refill_waste_limit; } size_t bytes_since_last_sample_point() const { return _bytes_since_last_sample_point; } // Allocate size HeapWords. The memory is NOT initialized to zero. --- 122,139 ---- static size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; } static size_t max_size_in_bytes() { return max_size() * BytesPerWord; } static void set_max_size(size_t max_size) { _max_size = max_size; } HeapWord* start() const { return _start; } ! HeapWord* fast_path_end() const { return _fast_path_end; } HeapWord* top() const { return _top; } ! HeapWord* hard_end(); HeapWord* pf_top() const { return _pf_top; } size_t desired_size() const { return _desired_size; } size_t used() const { return pointer_delta(top(), start()); } size_t used_bytes() const { return pointer_delta(top(), start(), 1); } ! size_t free() const { return pointer_delta(fast_path_end(), top()); } // Don't discard tlab if remaining space is larger than this. size_t refill_waste_limit() const { return _refill_waste_limit; } size_t bytes_since_last_sample_point() const { return _bytes_since_last_sample_point; } // Allocate size HeapWords. The memory is NOT initialized to zero.
*** 179,189 **** static size_t refill_waste_limit_increment() { return TLABWasteIncrement; } // Code generation support static ByteSize start_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _start); } ! static ByteSize current_end_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _current_end ); } static ByteSize top_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _top ); } static ByteSize pf_top_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _pf_top ); } static ByteSize size_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _desired_size ); } static ByteSize refill_waste_limit_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _refill_waste_limit ); } --- 179,189 ---- static size_t refill_waste_limit_increment() { return TLABWasteIncrement; } // Code generation support static ByteSize start_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _start); } ! static ByteSize fast_path_end_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _fast_path_end ); } static ByteSize top_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _top ); } static ByteSize pf_top_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _pf_top ); } static ByteSize size_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _desired_size ); } static ByteSize refill_waste_limit_offset() { return byte_offset_of(ThreadLocalAllocBuffer, _refill_waste_limit ); }
< prev index next >