提交 5268acc4 编写于 作者: T tonyp

6990359: G1: don't push a stolen entry on the taskqueue, deal with it directly

Summary: When an entry is stolen, don't push it on the task queue but process it directly.
Reviewed-by: iveresov, ysr, jcoomes
上级 0e9650db
...@@ -4118,10 +4118,14 @@ void G1ParEvacuateFollowersClosure::do_void() { ...@@ -4118,10 +4118,14 @@ void G1ParEvacuateFollowersClosure::do_void() {
while (queues()->steal(pss->queue_num(), pss->hash_seed(), stolen_task)) { while (queues()->steal(pss->queue_num(), pss->hash_seed(), stolen_task)) {
assert(pss->verify_task(stolen_task), "sanity"); assert(pss->verify_task(stolen_task), "sanity");
if (stolen_task.is_narrow()) { if (stolen_task.is_narrow()) {
pss->push_on_queue((narrowOop*) stolen_task); pss->deal_with_reference((narrowOop*) stolen_task);
} else { } else {
pss->push_on_queue((oop*) stolen_task); pss->deal_with_reference((oop*) stolen_task);
} }
// We've just processed a reference and we might have made
// available new entries on the queues. So we have to make sure
// we drain the queues as necessary.
pss->trim_queue(); pss->trim_queue();
} }
} while (!offer_termination()); } while (!offer_termination());
......
...@@ -1772,7 +1772,6 @@ public: ...@@ -1772,7 +1772,6 @@ public:
} }
} }
private:
template <class T> void deal_with_reference(T* ref_to_scan) { template <class T> void deal_with_reference(T* ref_to_scan) {
if (has_partial_array_mask(ref_to_scan)) { if (has_partial_array_mask(ref_to_scan)) {
_partial_scan_cl->do_oop_nv(ref_to_scan); _partial_scan_cl->do_oop_nv(ref_to_scan);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册