8209189: Make CompiledMethod::do_unloading more concurrent

Reviewed-by: kvn, coleenp
This commit is contained in:
Erik Österlund 2018-11-02 08:33:59 +01:00
parent 97d3dc7902
commit 25f14cd757
15 changed files with 309 additions and 447 deletions

View file

@ -323,6 +323,8 @@ class nmethod : public CompiledMethod {
bool is_zombie() const { return _state == zombie; }
bool is_unloaded() const { return _state == unloaded; }
virtual void do_unloading(bool unloading_occurred);
#if INCLUDE_RTM_OPT
// rtm state accessing and manipulating
RTMState rtm_state() const { return _rtm_state; }
@ -349,7 +351,7 @@ class nmethod : public CompiledMethod {
return _state;
}
void make_unloaded(oop cause);
void make_unloaded();
bool has_dependencies() { return dependencies_size() != 0; }
void flush_dependencies(bool delete_immediately);
@ -483,20 +485,6 @@ public:
public:
#endif
protected:
virtual bool do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive);
#if INCLUDE_JVMCI
// See comment for _jvmci_installed_code_triggers_invalidation field.
// Returns whether this nmethod was unloaded.
virtual bool do_unloading_jvmci();
#endif
private:
bool do_unloading_scopes(BoolObjectClosure* is_alive);
// Unload a nmethod if the *root object is dead.
bool can_unload(BoolObjectClosure* is_alive, oop* root);
bool unload_if_dead_at(RelocIterator *iter_at_oop, BoolObjectClosure* is_alive);
public:
void oops_do(OopClosure* f) { oops_do(f, false); }
void oops_do(OopClosure* f, bool allow_zombie);
@ -555,7 +543,7 @@ public:
// Logging
void log_identity(xmlStream* log) const;
void log_new_nmethod() const;
void log_state_change(oop cause = NULL) const;
void log_state_change() const;
// Prints block-level comments, including nmethod specific block labels:
virtual void print_block_comment(outputStream* stream, address block_begin) const {