< prev index next >

src/hotspot/share/code/nmethod.hpp

Print this page

        

*** 61,73 **** // Shared fields for all nmethod's int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method jmethodID _jmethod_id; // Cache of method()->jmethod_id() #if INCLUDE_JVMCI ! // Needed to keep nmethods alive that are not the default nmethod for the associated Method. ! oop _jvmci_installed_code; ! oop _speculation_log; #endif // To support simple linked-list chaining of nmethods: nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head --- 61,86 ---- // Shared fields for all nmethod's int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method jmethodID _jmethod_id; // Cache of method()->jmethod_id() #if INCLUDE_JVMCI ! // A weak reference to an InstalledCode object associated with ! // this nmethod. ! jweak _jvmci_installed_code; ! ! // A weak reference to a SpeculationLog object associated with ! // this nmethod. ! jweak _speculation_log; ! ! // Determines whether this nmethod is unloaded when the ! // referent in _jvmci_installed_code is cleared. This ! // will be false if the referent is initialized to a ! // HotSpotNMethod object whose isDefault field is true. ! // That is, installed code other than a "default" ! // HotSpotNMethod causes nmethod unloading. ! // This field is ignored once _jvmci_installed_code is NULL. ! bool _jvmci_installed_code_triggers_unloading; #endif // To support simple linked-list chaining of nmethods: nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head
*** 190,201 **** ExceptionHandlerTable* handler_table, ImplicitExceptionTable* nul_chk_table, AbstractCompiler* compiler, int comp_level #if INCLUDE_JVMCI ! , Handle installed_code, ! Handle speculation_log #endif ); // helper methods void* operator new(size_t size, int nmethod_size, int comp_level) throw(); --- 203,214 ---- ExceptionHandlerTable* handler_table, ImplicitExceptionTable* nul_chk_table, AbstractCompiler* compiler, int comp_level #if INCLUDE_JVMCI ! , jweak installed_code, ! jweak speculation_log #endif ); // helper methods void* operator new(size_t size, int nmethod_size, int comp_level) throw();
*** 234,245 **** ExceptionHandlerTable* handler_table, ImplicitExceptionTable* nul_chk_table, AbstractCompiler* compiler, int comp_level #if INCLUDE_JVMCI ! , Handle installed_code = Handle(), ! Handle speculation_log = Handle() #endif ); static nmethod* new_native_nmethod(const methodHandle& method, int compile_id, --- 247,258 ---- ExceptionHandlerTable* handler_table, ImplicitExceptionTable* nul_chk_table, AbstractCompiler* compiler, int comp_level #if INCLUDE_JVMCI ! , jweak installed_code = NULL, ! jweak speculation_log = NULL #endif ); static nmethod* new_native_nmethod(const methodHandle& method, int compile_id,
*** 431,461 **** // Evolution support. We make old (discarded) compiled methods point to new Method*s. void set_method(Method* method) { _method = method; } #if INCLUDE_JVMCI ! oop jvmci_installed_code() { return _jvmci_installed_code ; } char* jvmci_installed_code_name(char* buf, size_t buflen); ! // Update the state of any InstalledCode instance associated with // this nmethod based on the current value of _state. void maybe_invalidate_installed_code(); ! // Helper function to invalidate InstalledCode instances static void invalidate_installed_code(Handle installed_code, TRAPS); ! oop speculation_log() { return _speculation_log ; } private: void clear_jvmci_installed_code(); public: #endif protected: virtual bool do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred); #if INCLUDE_JVMCI virtual bool do_unloading_jvmci(BoolObjectClosure* is_alive, bool unloading_occurred); #endif private: bool do_unloading_scopes(BoolObjectClosure* is_alive, bool unloading_occurred); --- 444,493 ---- // Evolution support. We make old (discarded) compiled methods point to new Method*s. void set_method(Method* method) { _method = method; } #if INCLUDE_JVMCI ! // Gets the InstalledCode object associated with this nmethod ! // which may be NULL if this nmethod was not compiled by JVMCI ! // or the weak reference has been cleared. ! oop jvmci_installed_code(); ! ! // Copies the value of the name field in the InstalledCode ! // object (if any) associated with this nmethod into buf. ! // Returns the value of buf if it was updated otherwise NULL. char* jvmci_installed_code_name(char* buf, size_t buflen); ! // Updates the state of the InstalledCode (if any) associated with // this nmethod based on the current value of _state. void maybe_invalidate_installed_code(); ! // Deoptimizes the nmethod (if any) in the address field of a given ! // InstalledCode object. The address field is zeroed upon return. static void invalidate_installed_code(Handle installed_code, TRAPS); ! // Gets the SpeculationLog object associated with this nmethod ! // which may be NULL if this nmethod was not compiled by JVMCI ! // or the weak reference has been cleared. ! oop speculation_log(); private: + // Deletes the weak reference (if any) to the InstalledCode object + // associated with this nmethod. void clear_jvmci_installed_code(); + // Deletes the weak reference (if any) to the SpeculationLog object + // associated with this nmethod. + void clear_speculation_log(); + public: #endif protected: virtual bool do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred); #if INCLUDE_JVMCI + // See comment for _jvmci_installed_code_triggers_unloading field. + // Returns whether this nmethod was unloaded. virtual bool do_unloading_jvmci(BoolObjectClosure* is_alive, bool unloading_occurred); #endif private: bool do_unloading_scopes(BoolObjectClosure* is_alive, bool unloading_occurred);
< prev index next >