< prev index next >

src/share/vm/gc/parallel/psScavenge.cpp

Print this page
rev 12310 : [mq]: gcinterface.patch

*** 239,248 **** --- 239,268 ---- } return full_gc_done; } + class CreateThreadRootsTasksClosure : public ThreadClosure { + + private: + GCTaskQueue* _queue; + + public: + + CreateThreadRootsTasksClosure(GCTaskQueue* q) : _queue(q) { + } + + void do_thread(Thread* thread) { + if (thread->is_Java_thread()) { + _queue->enqueue(new ThreadRootsTask((JavaThread*) thread)); + } else if (thread->is_VM_thread()) { + _queue->enqueue(new ThreadRootsTask((VMThread*) thread)); + } + } + + }; + // This method contains no policy. You should probably // be calling invoke() instead. bool PSScavenge::invoke_no_policy() { assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread");
*** 377,387 **** } q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles)); // We scan the thread roots in parallel ! Threads::create_thread_roots_tasks(q); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data)); --- 397,408 ---- } q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles)); // We scan the thread roots in parallel ! CreateThreadRootsTasksClosure cl(q); ! Threads::threads_do(&cl); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::object_synchronizer)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::flat_profiler)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::management)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::system_dictionary)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::class_loader_data));
< prev index next >