< prev index next >

src/hotspot/share/ci/ciMethodData.cpp

Print this page

 40 // ------------------------------------------------------------------
 41 // ciMethodData::ciMethodData
 42 //
 43 ciMethodData::ciMethodData(MethodData* md)
 44 : ciMetadata(md),
 45   _data_size(0), _extra_data_size(0), _data(nullptr),
 46   _parameters_data_offset(0),
 47   _exception_handlers_data_offset(0),
 48   // Set an initial hint. Don't use set_hint_di() because
 49   // first_di() may be out of bounds if data_size is 0.
 50   _hint_di(first_di()),
 51   _state(empty_state),
 52   _saw_free_extra_data(false),
 53   // Initialize the escape information (to "don't know.");
 54   _eflags(0), _arg_local(0), _arg_stack(0), _arg_returned(0),
 55   _invocation_counter(0),
 56   _orig() {}
 57 
 58 
 59 static bool is_klass_loaded(Klass* k) {
 60   if (TrainingData::have_data()) {
 61     // If we're running in AOT mode some classes may not be loaded yet
 62     return !k->is_instance_klass() || InstanceKlass::cast(k)->is_loaded();
 63   }
 64   return true;
 65 }
 66 
 67 // Check for entries that reference an unloaded method
 68 class PrepareExtraDataClosure : public CleanExtraDataClosure {
 69   MethodData*            _mdo;
 70   SafepointStateTracker  _safepoint_tracker;
 71   GrowableArray<Method*> _uncached_methods;
 72 
 73 public:
 74   PrepareExtraDataClosure(MethodData* mdo)
 75     : _mdo(mdo),
 76       _safepoint_tracker(SafepointSynchronize::safepoint_state_tracker()),
 77       _uncached_methods()
 78   { }
 79 
 80   bool is_live(Method* m) {
 81     Klass* holder = m->method_holder();
 82     if (holder == nullptr || !holder->is_loader_present_and_alive() || !is_klass_loaded(holder)) {
 83       return false;
 84     }

 40 // ------------------------------------------------------------------
 41 // ciMethodData::ciMethodData
 42 //
 43 ciMethodData::ciMethodData(MethodData* md)
 44 : ciMetadata(md),
 45   _data_size(0), _extra_data_size(0), _data(nullptr),
 46   _parameters_data_offset(0),
 47   _exception_handlers_data_offset(0),
 48   // Set an initial hint. Don't use set_hint_di() because
 49   // first_di() may be out of bounds if data_size is 0.
 50   _hint_di(first_di()),
 51   _state(empty_state),
 52   _saw_free_extra_data(false),
 53   // Initialize the escape information (to "don't know.");
 54   _eflags(0), _arg_local(0), _arg_stack(0), _arg_returned(0),
 55   _invocation_counter(0),
 56   _orig() {}
 57 
 58 
 59 static bool is_klass_loaded(Klass* k) {
 60   return TrainingData::is_klass_loaded(k);




 61 }
 62 
 63 // Check for entries that reference an unloaded method
 64 class PrepareExtraDataClosure : public CleanExtraDataClosure {
 65   MethodData*            _mdo;
 66   SafepointStateTracker  _safepoint_tracker;
 67   GrowableArray<Method*> _uncached_methods;
 68 
 69 public:
 70   PrepareExtraDataClosure(MethodData* mdo)
 71     : _mdo(mdo),
 72       _safepoint_tracker(SafepointSynchronize::safepoint_state_tracker()),
 73       _uncached_methods()
 74   { }
 75 
 76   bool is_live(Method* m) {
 77     Klass* holder = m->method_holder();
 78     if (holder == nullptr || !holder->is_loader_present_and_alive() || !is_klass_loaded(holder)) {
 79       return false;
 80     }
< prev index next >