124 size_t free() const { return pointer_delta(end(), top()); }
125 // Don't discard tlab if remaining space is larger than this.
126 size_t refill_waste_limit() const { return _refill_waste_limit; }
127
128 // Allocate size HeapWords. The memory is NOT initialized to zero.
129 inline HeapWord* allocate(size_t size);
130
131 // Reserve space at the end of TLAB
132 static size_t end_reserve() {
133 int reserve_size = typeArrayOopDesc::header_size(T_INT);
134 return MAX2(reserve_size, _reserve_for_allocation_prefetch);
135 }
136 static size_t alignment_reserve() { return align_object_size(end_reserve()); }
137 static size_t alignment_reserve_in_bytes() { return alignment_reserve() * HeapWordSize; }
138
139 // Return tlab size or remaining space in eden such that the
140 // space is large enough to hold obj_size and necessary fill space.
141 // Otherwise return 0;
142 inline size_t compute_size(size_t obj_size);
143
144 // Record slow allocation
145 inline void record_slow_allocation(size_t obj_size);
146
147 // Initialization at startup
148 static void startup_initialization();
149
150 // Make an in-use tlab parsable, optionally retiring and/or zapping it.
151 void make_parsable(bool retire, bool zap = true);
152
153 // Retire in-use tlab before allocation of a new tlab
154 void clear_before_allocation();
155
156 // Accumulate statistics across all tlabs before gc
157 static void accumulate_statistics_before_gc();
158
159 // Resize tlabs for all threads
160 static void resize_all_tlabs();
161
162 void fill(HeapWord* start, HeapWord* top, size_t new_size);
163 void initialize();
|
124 size_t free() const { return pointer_delta(end(), top()); }
125 // Don't discard tlab if remaining space is larger than this.
126 size_t refill_waste_limit() const { return _refill_waste_limit; }
127
128 // Allocate size HeapWords. The memory is NOT initialized to zero.
129 inline HeapWord* allocate(size_t size);
130
131 // Reserve space at the end of TLAB
132 static size_t end_reserve() {
133 int reserve_size = typeArrayOopDesc::header_size(T_INT);
134 return MAX2(reserve_size, _reserve_for_allocation_prefetch);
135 }
136 static size_t alignment_reserve() { return align_object_size(end_reserve()); }
137 static size_t alignment_reserve_in_bytes() { return alignment_reserve() * HeapWordSize; }
138
139 // Return tlab size or remaining space in eden such that the
140 // space is large enough to hold obj_size and necessary fill space.
141 // Otherwise return 0;
142 inline size_t compute_size(size_t obj_size);
143
144 // Compute the minimal needed tlab size for the given object size.
145 static inline size_t compute_min_size(size_t obj_size);
146
147 // Record slow allocation
148 inline void record_slow_allocation(size_t obj_size);
149
150 // Initialization at startup
151 static void startup_initialization();
152
153 // Make an in-use tlab parsable, optionally retiring and/or zapping it.
154 void make_parsable(bool retire, bool zap = true);
155
156 // Retire in-use tlab before allocation of a new tlab
157 void clear_before_allocation();
158
159 // Accumulate statistics across all tlabs before gc
160 static void accumulate_statistics_before_gc();
161
162 // Resize tlabs for all threads
163 static void resize_all_tlabs();
164
165 void fill(HeapWord* start, HeapWord* top, size_t new_size);
166 void initialize();
|