< prev index next >
src/share/vm/runtime/thread.cpp
Print this page
rev 13387 : [mq]: parallel_sp_cleaning.patch
@@ -789,11 +789,12 @@
active_handles()->oops_do(f);
// Do oop for ThreadShadow
f->do_oop((oop*)&_pending_exception);
handle_area()->oops_do(f);
if (MonitorInUseLists) {
- if (Universe::heap()->supports_per_thread_monitor_deflation()) {
+ VM_Operation* op = VMThread::vm_operation();
+ if (op != NULL && op->deflates_idle_monitors()) {
ObjectSynchronizer::deflate_idle_monitors_and_oops_do(this, f);
} else {
ObjectSynchronizer::thread_local_used_oops_do(this, f);
}
}
@@ -4389,15 +4390,22 @@
"Thread " PTR_FORMAT " has incorrect parity %d != %d", p2i(p), thread_parity, _thread_claim_parity);
}
}
#endif // ASSERT
-void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf) {
+void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf, CodeBlobClosure* nmethods_cl) {
+ CodeBlobClosure* blobs;
+ VM_Operation* op = VMThread::vm_operation();
+ if (op != NULL && op->marks_nmethods()) {
+ }
int cp = Threads::thread_claim_parity();
ALL_JAVA_THREADS(p) {
if (p->claim_oops_do(is_par, cp)) {
p->oops_do(f, cf);
+ if (nmethods_cl != NULL && ! p->is_Code_cache_sweeper_thread()) {
+ p->nmethods_do(nmethods_cl);
+ }
}
}
VMThread* vmt = VMThread::vm_thread();
if (vmt->claim_oops_do(is_par, cp)) {
vmt->oops_do(f, cf);
< prev index next >