< prev index next >

src/hotspot/share/runtime/safepoint.cpp

Print this page
rev 51807 : imported patch nmethod-marking.patch


 581   if (event.should_commit()) {
 582     post_safepoint_end_event(&event);
 583   }
 584 }
 585 
 586 bool SafepointSynchronize::is_cleanup_needed() {
 587   // Need a safepoint if there are many monitors to deflate.
 588   if (ObjectSynchronizer::is_cleanup_needed()) return true;
 589   // Need a safepoint if some inline cache buffers is non-empty
 590   if (!InlineCacheBuffer::is_empty()) return true;
 591   return false;
 592 }
 593 
 594 class ParallelSPCleanupThreadClosure : public ThreadClosure {
 595 private:
 596   CodeBlobClosure* _nmethod_cl;
 597   DeflateMonitorCounters* _counters;
 598 
 599 public:
 600   ParallelSPCleanupThreadClosure(DeflateMonitorCounters* counters) :
 601     _nmethod_cl(NMethodSweeper::prepare_mark_active_nmethods()), _counters(counters) {}

 602 
 603   void do_thread(Thread* thread) {
 604     ObjectSynchronizer::deflate_thread_local_monitors(thread, _counters);
 605     if (_nmethod_cl != NULL && thread->is_Java_thread() &&
 606         ! thread->is_Code_cache_sweeper_thread()) {
 607       JavaThread* jt = (JavaThread*) thread;
 608       jt->nmethods_do(_nmethod_cl);
 609     }
 610   }
 611 };
 612 
 613 class ParallelSPCleanupTask : public AbstractGangTask {
 614 private:
 615   SubTasksDone _subtasks;
 616   ParallelSPCleanupThreadClosure _cleanup_threads_cl;
 617   uint _num_workers;
 618   DeflateMonitorCounters* _counters;
 619 public:
 620   ParallelSPCleanupTask(uint num_workers, DeflateMonitorCounters* counters) :
 621     AbstractGangTask("Parallel Safepoint Cleanup"),




 581   if (event.should_commit()) {
 582     post_safepoint_end_event(&event);
 583   }
 584 }
 585 
 586 bool SafepointSynchronize::is_cleanup_needed() {
 587   // Need a safepoint if there are many monitors to deflate.
 588   if (ObjectSynchronizer::is_cleanup_needed()) return true;
 589   // Need a safepoint if some inline cache buffers is non-empty
 590   if (!InlineCacheBuffer::is_empty()) return true;
 591   return false;
 592 }
 593 
 594 class ParallelSPCleanupThreadClosure : public ThreadClosure {
 595 private:
 596   CodeBlobClosure* _nmethod_cl;
 597   DeflateMonitorCounters* _counters;
 598 
 599 public:
 600   ParallelSPCleanupThreadClosure(DeflateMonitorCounters* counters) :
 601     _nmethod_cl(ThreadLocalHandshakes ? NULL : NMethodSweeper::prepare_mark_active_nmethods()),
 602     _counters(counters) {}
 603 
 604   void do_thread(Thread* thread) {
 605     ObjectSynchronizer::deflate_thread_local_monitors(thread, _counters);
 606     if (_nmethod_cl != NULL && thread->is_Java_thread() &&
 607         ! thread->is_Code_cache_sweeper_thread()) {
 608       JavaThread* jt = (JavaThread*) thread;
 609       jt->nmethods_do(_nmethod_cl);
 610     }
 611   }
 612 };
 613 
 614 class ParallelSPCleanupTask : public AbstractGangTask {
 615 private:
 616   SubTasksDone _subtasks;
 617   ParallelSPCleanupThreadClosure _cleanup_threads_cl;
 618   uint _num_workers;
 619   DeflateMonitorCounters* _counters;
 620 public:
 621   ParallelSPCleanupTask(uint num_workers, DeflateMonitorCounters* counters) :
 622     AbstractGangTask("Parallel Safepoint Cleanup"),


< prev index next >