< prev index next >
src/hotspot/share/gc/parallel/psScavenge.cpp
Print this page
rev 57895 : [mq]: 8215297-remove-ptt
*** 41,50 ****
--- 41,51 ----
#include "gc/shared/gcLocker.hpp"
#include "gc/shared/gcTimer.hpp"
#include "gc/shared/gcTrace.hpp"
#include "gc/shared/gcTraceTime.inline.hpp"
#include "gc/shared/isGCActiveMark.hpp"
+ #include "gc/shared/owstTaskTerminator.hpp"
#include "gc/shared/referencePolicy.hpp"
#include "gc/shared/referenceProcessor.hpp"
#include "gc/shared/referenceProcessorPhaseTimes.hpp"
#include "gc/shared/scavengableNMethods.hpp"
#include "gc/shared/spaceDecorator.inline.hpp"
*** 136,146 ****
// Do the real work
pm->drain_stacks(false);
}
! static void steal_work(ParallelTaskTerminator& terminator, uint worker_id) {
assert(ParallelScavengeHeap::heap()->is_gc_active(), "called outside gc");
PSPromotionManager* pm =
PSPromotionManager::gc_thread_promotion_manager(worker_id);
pm->drain_stacks(true);
--- 137,147 ----
// Do the real work
pm->drain_stacks(false);
}
! static void steal_work(OWSTTaskTerminator& terminator, uint worker_id) {
assert(ParallelScavengeHeap::heap()->is_gc_active(), "called outside gc");
PSPromotionManager* pm =
PSPromotionManager::gc_thread_promotion_manager(worker_id);
pm->drain_stacks(true);
*** 216,226 ****
virtual void execute(ProcessTask& process_task, uint ergo_workers);
};
class PSRefProcTask : public AbstractGangTask {
typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask;
! TaskTerminator _terminator;
ProcessTask& _task;
uint _active_workers;
public:
PSRefProcTask(ProcessTask& task, uint active_workers)
--- 217,227 ----
virtual void execute(ProcessTask& process_task, uint ergo_workers);
};
class PSRefProcTask : public AbstractGangTask {
typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask;
! OWSTTaskTerminator _terminator;
ProcessTask& _task;
uint _active_workers;
public:
PSRefProcTask(ProcessTask& task, uint active_workers)
*** 238,248 ****
PSEvacuateFollowersClosure evac_followers(promotion_manager);
PSIsAliveClosure is_alive;
_task.work(worker_id, is_alive, keep_alive, evac_followers);
if (_task.marks_oops_alive() && _active_workers > 1) {
! steal_work(*_terminator.terminator(), worker_id);
}
}
};
void PSRefProcTaskExecutor::execute(ProcessTask& process_task, uint ergo_workers) {
--- 239,249 ----
PSEvacuateFollowersClosure evac_followers(promotion_manager);
PSIsAliveClosure is_alive;
_task.work(worker_id, is_alive, keep_alive, evac_followers);
if (_task.marks_oops_alive() && _active_workers > 1) {
! steal_work(_terminator, worker_id);
}
}
};
void PSRefProcTaskExecutor::execute(ProcessTask& process_task, uint ergo_workers) {
*** 312,322 ****
SequentialSubTasksDone _subtasks;
PSOldGen* _old_gen;
HeapWord* _gen_top;
uint _active_workers;
bool _is_empty;
! TaskTerminator _terminator;
public:
ScavengeRootsTask(PSOldGen* old_gen,
HeapWord* gen_top,
uint active_workers,
--- 313,323 ----
SequentialSubTasksDone _subtasks;
PSOldGen* _old_gen;
HeapWord* _gen_top;
uint _active_workers;
bool _is_empty;
! OWSTTaskTerminator _terminator;
public:
ScavengeRootsTask(PSOldGen* old_gen,
HeapWord* gen_top,
uint active_workers,
*** 375,385 ****
// PSPromotionManager::drain_stacks_depth() does not fully drain its
// stacks and expects a steal_work() to complete the draining if
// ParallelGCThreads is > 1.
if (_active_workers > 1) {
! steal_work(*_terminator.terminator() , worker_id);
}
}
};
// This method contains no policy. You should probably
--- 376,386 ----
// PSPromotionManager::drain_stacks_depth() does not fully drain its
// stacks and expects a steal_work() to complete the draining if
// ParallelGCThreads is > 1.
if (_active_workers > 1) {
! steal_work(_terminator, worker_id);
}
}
};
// This method contains no policy. You should probably
*** 729,739 ****
log_debug(gc, task, time)("VM-Thread " JLONG_FORMAT " " JLONG_FORMAT " " JLONG_FORMAT,
scavenge_entry.ticks(), scavenge_midpoint.ticks(),
scavenge_exit.ticks());
#ifdef TRACESPINNING
! ParallelTaskTerminator::print_termination_counts();
#endif
AdaptiveSizePolicyOutput::print(size_policy, heap->total_collections());
_gc_timer.register_gc_end();
--- 730,740 ----
log_debug(gc, task, time)("VM-Thread " JLONG_FORMAT " " JLONG_FORMAT " " JLONG_FORMAT,
scavenge_entry.ticks(), scavenge_midpoint.ticks(),
scavenge_exit.ticks());
#ifdef TRACESPINNING
! OWSTTaskTerminator::print_termination_counts();
#endif
AdaptiveSizePolicyOutput::print(size_policy, heap->total_collections());
_gc_timer.register_gc_end();
< prev index next >