< prev index next >
src/hotspot/share/runtime/sweeper.cpp
Print this page
rev 57156 : imported patch 8234796-v3
*** 195,222 ****
}
bool NMethodSweeper::wait_for_stack_scanning() {
return _current.end();
}
! class NMethodMarkingThreadClosure : public ThreadClosure {
private:
CodeBlobClosure* _cl;
public:
! NMethodMarkingThreadClosure(CodeBlobClosure* cl) : _cl(cl) {}
void do_thread(Thread* thread) {
if (thread->is_Java_thread() && ! thread->is_Code_cache_sweeper_thread()) {
JavaThread* jt = (JavaThread*) thread;
jt->nmethods_do(_cl);
}
}
};
class NMethodMarkingTask : public AbstractGangTask {
private:
! NMethodMarkingThreadClosure* _cl;
public:
! NMethodMarkingTask(NMethodMarkingThreadClosure* cl) :
AbstractGangTask("Parallel NMethod Marking"),
_cl(cl) {
Threads::change_thread_claim_token();
}
--- 195,222 ----
}
bool NMethodSweeper::wait_for_stack_scanning() {
return _current.end();
}
! class NMethodMarkingClosure : public HandshakeClosure {
private:
CodeBlobClosure* _cl;
public:
! NMethodMarkingClosure(CodeBlobClosure* cl) : HandshakeClosure("NMethodMarking"), _cl(cl) {}
void do_thread(Thread* thread) {
if (thread->is_Java_thread() && ! thread->is_Code_cache_sweeper_thread()) {
JavaThread* jt = (JavaThread*) thread;
jt->nmethods_do(_cl);
}
}
};
class NMethodMarkingTask : public AbstractGangTask {
private:
! NMethodMarkingClosure* _cl;
public:
! NMethodMarkingTask(NMethodMarkingClosure* cl) :
AbstractGangTask("Parallel NMethod Marking"),
_cl(cl) {
Threads::change_thread_claim_token();
}
*** 237,247 ****
void NMethodSweeper::mark_active_nmethods() {
CodeBlobClosure* cl = prepare_mark_active_nmethods();
if (cl != NULL) {
WorkGang* workers = Universe::heap()->get_safepoint_workers();
if (workers != NULL) {
! NMethodMarkingThreadClosure tcl(cl);
NMethodMarkingTask task(&tcl);
workers->run_task(&task);
} else {
Threads::nmethods_do(cl);
}
--- 237,247 ----
void NMethodSweeper::mark_active_nmethods() {
CodeBlobClosure* cl = prepare_mark_active_nmethods();
if (cl != NULL) {
WorkGang* workers = Universe::heap()->get_safepoint_workers();
if (workers != NULL) {
! NMethodMarkingClosure tcl(cl);
NMethodMarkingTask task(&tcl);
workers->run_task(&task);
} else {
Threads::nmethods_do(cl);
}
*** 322,333 ****
{
MutexLocker ccl(CodeCache_lock, Mutex::_no_safepoint_check_flag);
code_cl = prepare_mark_active_nmethods();
}
if (code_cl != NULL) {
! NMethodMarkingThreadClosure tcl(code_cl);
! Handshake::execute(&tcl);
}
} else {
VM_MarkActiveNMethods op;
VMThread::execute(&op);
}
--- 322,333 ----
{
MutexLocker ccl(CodeCache_lock, Mutex::_no_safepoint_check_flag);
code_cl = prepare_mark_active_nmethods();
}
if (code_cl != NULL) {
! NMethodMarkingClosure nm_cl(code_cl);
! Handshake::execute(&nm_cl);
}
} else {
VM_MarkActiveNMethods op;
VMThread::execute(&op);
}
< prev index next >