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);
|