< prev index next >
src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp
Print this page
rev 49680 : imported patch 6672778-partial-queue-trimming
rev 49681 : imported patch 6672778-refactoring
rev 49682 : [mq]: 6672778-stefanj-review
*** 150,193 ****
// we drain the queues as necessary.
trim_queue();
}
}
! inline bool G1ParScanThreadState::should_start_trim_queue_partially() const {
return !_refs->overflow_empty() || _refs->size() > _stack_drain_upper_threshold;
}
! inline bool G1ParScanThreadState::should_end_trim_queue_partially() const {
return _refs->overflow_empty() && _refs->size() <= _stack_drain_lower_threshold;
}
! inline void G1ParScanThreadState::trim_queue_partially_internal() {
StarTask ref;
- do {
// Drain the overflow stack first, so other threads can potentially steal.
while (_refs->pop_overflow(ref)) {
if (!_refs->try_push_to_taskqueue(ref)) {
dispatch_reference(ref);
}
}
! while (_refs->pop_local(ref, _stack_drain_lower_threshold)) {
dispatch_reference(ref);
}
- } while (!should_end_trim_queue_partially());
}
inline void G1ParScanThreadState::trim_queue_partially() {
! if (should_start_trim_queue_partially()) {
const Ticks start = Ticks::now();
! trim_queue_partially_internal();
_trim_ticks += Ticks::now() - start;
- }
}
! inline Tickspan G1ParScanThreadState::trim_ticks_and_reset() {
! Tickspan result = _trim_ticks;
_trim_ticks = Tickspan();
- return result;
}
#endif // SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_INLINE_HPP
--- 150,197 ----
// we drain the queues as necessary.
trim_queue();
}
}
! inline bool G1ParScanThreadState::needs_partial_trimming() const {
return !_refs->overflow_empty() || _refs->size() > _stack_drain_upper_threshold;
}
! inline bool G1ParScanThreadState::is_partially_trimmed() const {
return _refs->overflow_empty() && _refs->size() <= _stack_drain_lower_threshold;
}
! inline void G1ParScanThreadState::trim_queue_to_threshold(uint threshold) {
StarTask ref;
// Drain the overflow stack first, so other threads can potentially steal.
while (_refs->pop_overflow(ref)) {
if (!_refs->try_push_to_taskqueue(ref)) {
dispatch_reference(ref);
}
}
! while (_refs->pop_local(ref, threshold)) {
dispatch_reference(ref);
}
}
inline void G1ParScanThreadState::trim_queue_partially() {
! if (!needs_partial_trimming()) {
! return;
! }
!
const Ticks start = Ticks::now();
! do {
! trim_queue_to_threshold(_stack_drain_lower_threshold);
! } while (!is_partially_trimmed());
_trim_ticks += Ticks::now() - start;
}
! inline Tickspan G1ParScanThreadState::trim_ticks() {
! return _trim_ticks;
! }
!
! inline void G1ParScanThreadState::reset_trim_ticks() {
_trim_ticks = Tickspan();
}
#endif // SHARE_VM_GC_G1_G1PARSCANTHREADSTATE_INLINE_HPP
< prev index next >