< prev index next >

src/hotspot/share/runtime/deoptimization.cpp

Print this page
rev 57079 : [mq]: handshake-logs


 790       callee_size_of_parameters = mh->size_of_parameters();
 791       callee_max_locals = mh->max_locals();
 792       is_top_frame = false;
 793     }
 794   }
 795 #endif /* !PRODUCT */
 796 
 797 
 798   return bt;
 799 JRT_END
 800 
 801 class DeoptimizeMarkedTC : public ThreadClosure {
 802  public:
 803   virtual void do_thread(Thread* thread) {
 804     assert(thread->is_Java_thread(), "must be");
 805     JavaThread* jt = (JavaThread*)thread;
 806     jt->deoptimize_marked_methods();
 807   }
 808 };
 809 









 810 void Deoptimization::deoptimize_all_marked() {
 811   ResourceMark rm;
 812   DeoptimizationMarker dm;
 813 
 814   if (SafepointSynchronize::is_at_safepoint()) {
 815     DeoptimizeMarkedTC deopt;
 816     // Make the dependent methods not entrant
 817     CodeCache::make_marked_nmethods_not_entrant();
 818     Threads::java_threads_do(&deopt);
 819   } else {
 820     // Make the dependent methods not entrant
 821     {
 822       MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 823       CodeCache::make_marked_nmethods_not_entrant();
 824     }
 825     DeoptimizeMarkedTC deopt;
 826     Handshake::execute(&deopt);
 827   }
 828 }
 829 
 830 Deoptimization::DeoptAction Deoptimization::_unloaded_action
 831   = Deoptimization::Action_reinterpret;
 832 
 833 
 834 
 835 #if INCLUDE_JVMCI || INCLUDE_AOT
 836 template<typename CacheType>
 837 class BoxCacheBase : public CHeapObj<mtCompiler> {
 838 protected:
 839   static InstanceKlass* find_cache_klass(Symbol* klass_name, TRAPS) {
 840     ResourceMark rm;
 841     char* klass_name_str = klass_name->as_C_string();
 842     Klass* k = SystemDictionary::find(klass_name, Handle(), Handle(), THREAD);
 843     guarantee(k != NULL, "%s must be loaded", klass_name_str);
 844     InstanceKlass* ik = InstanceKlass::cast(k);
 845     guarantee(ik->is_initialized(), "%s must be initialized", klass_name_str);




 790       callee_size_of_parameters = mh->size_of_parameters();
 791       callee_max_locals = mh->max_locals();
 792       is_top_frame = false;
 793     }
 794   }
 795 #endif /* !PRODUCT */
 796 
 797 
 798   return bt;
 799 JRT_END
 800 
 801 class DeoptimizeMarkedTC : public ThreadClosure {
 802  public:
 803   virtual void do_thread(Thread* thread) {
 804     assert(thread->is_Java_thread(), "must be");
 805     JavaThread* jt = (JavaThread*)thread;
 806     jt->deoptimize_marked_methods();
 807   }
 808 };
 809 
 810 class DeoptimizeMarkedHS : public HandshakeOperation {
 811  public:
 812   const char* name() { return "Deoptimize"; }
 813   void do_thread(JavaThread* jt) {
 814     jt->deoptimize_marked_methods();
 815   }
 816 };
 817 
 818 
 819 void Deoptimization::deoptimize_all_marked() {
 820   ResourceMark rm;
 821   DeoptimizationMarker dm;
 822 
 823   if (SafepointSynchronize::is_at_safepoint()) {
 824     DeoptimizeMarkedTC deopt;
 825     // Make the dependent methods not entrant
 826     CodeCache::make_marked_nmethods_not_entrant();
 827     Threads::java_threads_do(&deopt);
 828   } else {
 829     // Make the dependent methods not entrant
 830     {
 831       MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
 832       CodeCache::make_marked_nmethods_not_entrant();
 833     }
 834     DeoptimizeMarkedHS deopt;
 835     Handshake::execute(&deopt);
 836   }
 837 }
 838 
 839 Deoptimization::DeoptAction Deoptimization::_unloaded_action
 840   = Deoptimization::Action_reinterpret;
 841 
 842 
 843 
 844 #if INCLUDE_JVMCI || INCLUDE_AOT
 845 template<typename CacheType>
 846 class BoxCacheBase : public CHeapObj<mtCompiler> {
 847 protected:
 848   static InstanceKlass* find_cache_klass(Symbol* klass_name, TRAPS) {
 849     ResourceMark rm;
 850     char* klass_name_str = klass_name->as_C_string();
 851     Klass* k = SystemDictionary::find(klass_name, Handle(), Handle(), THREAD);
 852     guarantee(k != NULL, "%s must be loaded", klass_name_str);
 853     InstanceKlass* ik = InstanceKlass::cast(k);
 854     guarantee(ik->is_initialized(), "%s must be initialized", klass_name_str);


< prev index next >