< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahUnload.cpp

Print this page
rev 57157 : [mq]: 8234796-v4


 141   {
 142     MutexLocker cldg_ml(ClassLoaderDataGraph_lock);
 143     unloading_occurred = SystemDictionary::do_unloading(heap->gc_timer());
 144   }
 145 
 146   Klass::clean_weak_klass_links(unloading_occurred);
 147   ShenandoahCodeRoots::unlink(ShenandoahHeap::heap()->workers(), unloading_occurred);
 148   DependencyContext::cleaning_end();
 149 }
 150 
 151 void ShenandoahUnload::purge() {
 152   {
 153     SuspendibleThreadSetJoiner sts;
 154     ShenandoahCodeRoots::purge(ShenandoahHeap::heap()->workers());
 155   }
 156 
 157   ClassLoaderDataGraph::purge();
 158   CodeCache::purge_exception_caches();
 159 }
 160 
 161 class ShenandoahUnloadRendezvousClosure : public ThreadClosure {
 162 public:

 163   void do_thread(Thread* thread) {}
 164 };
 165 
 166 void ShenandoahUnload::unload() {
 167   assert(ShenandoahConcurrentRoots::can_do_concurrent_class_unloading(), "Why we here?");
 168   if (!ShenandoahHeap::heap()->is_evacuation_in_progress()) {
 169     return;
 170   }
 171 
 172   // Unlink stale metadata and nmethods
 173   unlink();
 174 
 175   // Make sure stale metadata and nmethods are no longer observable
 176   ShenandoahUnloadRendezvousClosure cl;
 177   Handshake::execute(&cl);
 178 
 179   // Purge stale metadata and nmethods that were unlinked
 180   purge();
 181 }
 182 


 141   {
 142     MutexLocker cldg_ml(ClassLoaderDataGraph_lock);
 143     unloading_occurred = SystemDictionary::do_unloading(heap->gc_timer());
 144   }
 145 
 146   Klass::clean_weak_klass_links(unloading_occurred);
 147   ShenandoahCodeRoots::unlink(ShenandoahHeap::heap()->workers(), unloading_occurred);
 148   DependencyContext::cleaning_end();
 149 }
 150 
 151 void ShenandoahUnload::purge() {
 152   {
 153     SuspendibleThreadSetJoiner sts;
 154     ShenandoahCodeRoots::purge(ShenandoahHeap::heap()->workers());
 155   }
 156 
 157   ClassLoaderDataGraph::purge();
 158   CodeCache::purge_exception_caches();
 159 }
 160 
 161 class ShenandoahUnloadRendezvousClosure : public HandshakeClosure {
 162 public:
 163   ShenandoahUnloadRendezvousClosure() : HandshakeClosure("ShenandoahUnloadRendezvous") {}
 164   void do_thread(Thread* thread) {}
 165 };
 166 
 167 void ShenandoahUnload::unload() {
 168   assert(ShenandoahConcurrentRoots::can_do_concurrent_class_unloading(), "Why we here?");
 169   if (!ShenandoahHeap::heap()->is_evacuation_in_progress()) {
 170     return;
 171   }
 172 
 173   // Unlink stale metadata and nmethods
 174   unlink();
 175 
 176   // Make sure stale metadata and nmethods are no longer observable
 177   ShenandoahUnloadRendezvousClosure cl;
 178   Handshake::execute(&cl);
 179 
 180   // Purge stale metadata and nmethods that were unlinked
 181   purge();
 182 }
 183 
< prev index next >