src/hotspot/share/ci/ciMethodData.cpp
changeset 55514 03468b206457
parent 53546 63eb7e38ce84
child 57709 155b084cf384
equal deleted inserted replaced
55505:0bf9477626ef 55514:03468b206457
    79 }
    79 }
    80 
    80 
    81 // Check for entries that reference an unloaded method
    81 // Check for entries that reference an unloaded method
    82 class PrepareExtraDataClosure : public CleanExtraDataClosure {
    82 class PrepareExtraDataClosure : public CleanExtraDataClosure {
    83   MethodData*            _mdo;
    83   MethodData*            _mdo;
    84   uint64_t               _safepoint_counter;
    84   SafepointStateTracker  _safepoint_tracker;
    85   GrowableArray<Method*> _uncached_methods;
    85   GrowableArray<Method*> _uncached_methods;
    86 
    86 
    87 public:
    87 public:
    88   PrepareExtraDataClosure(MethodData* mdo)
    88   PrepareExtraDataClosure(MethodData* mdo)
    89     : _mdo(mdo),
    89     : _mdo(mdo),
    90       _safepoint_counter(SafepointSynchronize::safepoint_counter()),
    90       _safepoint_tracker(SafepointSynchronize::safepoint_state_tracker()),
    91       _uncached_methods()
    91       _uncached_methods()
    92   { }
    92   { }
    93 
    93 
    94   bool is_live(Method* m) {
    94   bool is_live(Method* m) {
    95     if (!m->method_holder()->is_loader_alive()) {
    95     if (!m->method_holder()->is_loader_alive()) {
   101     }
   101     }
   102     return true;
   102     return true;
   103   }
   103   }
   104 
   104 
   105   bool has_safepointed() {
   105   bool has_safepointed() {
   106     return SafepointSynchronize::safepoint_counter() != _safepoint_counter;
   106     return _safepoint_tracker.safepoint_state_changed();
   107   }
   107   }
   108 
   108 
   109   bool finish() {
   109   bool finish() {
   110     if (_uncached_methods.length() == 0) {
   110     if (_uncached_methods.length() == 0) {
   111       // Preparation finished iff all Methods* were already cached.
   111       // Preparation finished iff all Methods* were already cached.