hotspot/src/share/vm/oops/instanceKlass.hpp
changeset 3824 86e9e4b25bdf
parent 3822 388b0393a042
child 4094 1f424b2b2171
equal deleted inserted replaced
3822:388b0393a042 3824:86e9e4b25bdf
   463   }
   463   }
   464 
   464 
   465   // RedefineClasses() support for previous versions:
   465   // RedefineClasses() support for previous versions:
   466   void add_previous_version(instanceKlassHandle ikh, BitMap *emcp_methods,
   466   void add_previous_version(instanceKlassHandle ikh, BitMap *emcp_methods,
   467          int emcp_method_count);
   467          int emcp_method_count);
       
   468   // If the _previous_versions array is non-NULL, then this klass
       
   469   // has been redefined at least once even if we aren't currently
       
   470   // tracking a previous version.
       
   471   bool has_been_redefined() const { return _previous_versions != NULL; }
   468   bool has_previous_version() const;
   472   bool has_previous_version() const;
   469   void init_previous_versions() {
   473   void init_previous_versions() {
   470     _previous_versions = NULL;
   474     _previous_versions = NULL;
   471   }
   475   }
   472   GrowableArray<PreviousVersionNode *>* previous_versions() const {
   476   GrowableArray<PreviousVersionNode *>* previous_versions() const {
   504   // JSR 292 support
   508   // JSR 292 support
   505   oop bootstrap_method() const                        { return _bootstrap_method; }
   509   oop bootstrap_method() const                        { return _bootstrap_method; }
   506   void set_bootstrap_method(oop mh)                   { oop_store(&_bootstrap_method, mh); }
   510   void set_bootstrap_method(oop mh)                   { oop_store(&_bootstrap_method, mh); }
   507 
   511 
   508   // jmethodID support
   512   // jmethodID support
   509   static jmethodID get_jmethod_id(instanceKlassHandle ik_h, size_t idnum,
   513   static jmethodID get_jmethod_id(instanceKlassHandle ik_h,
   510                                   jmethodID new_id, jmethodID* new_jmeths);
   514                      methodHandle method_h);
   511   static jmethodID jmethod_id_for_impl(instanceKlassHandle ik_h, methodHandle method_h);
   515   static jmethodID get_jmethod_id_fetch_or_update(instanceKlassHandle ik_h,
       
   516                      size_t idnum, jmethodID new_id, jmethodID* new_jmeths,
       
   517                      jmethodID* to_dealloc_id_p,
       
   518                      jmethodID** to_dealloc_jmeths_p);
       
   519   static void get_jmethod_id_length_value(jmethodID* cache, size_t idnum,
       
   520                 size_t *length_p, jmethodID* id_p);
   512   jmethodID jmethod_id_or_null(methodOop method);
   521   jmethodID jmethod_id_or_null(methodOop method);
   513 
   522 
   514   // cached itable index support
   523   // cached itable index support
   515   void set_cached_itable_index(size_t idnum, int index);
   524   void set_cached_itable_index(size_t idnum, int index);
   516   int cached_itable_index(size_t idnum);
   525   int cached_itable_index(size_t idnum);
   752 #endif
   761 #endif
   753   void set_rewritten()                  { _rewritten = true; }
   762   void set_rewritten()                  { _rewritten = true; }
   754   void set_init_thread(Thread *thread)  { _init_thread = thread; }
   763   void set_init_thread(Thread *thread)  { _init_thread = thread; }
   755 
   764 
   756   u2 idnum_allocated_count() const      { return _idnum_allocated_count; }
   765   u2 idnum_allocated_count() const      { return _idnum_allocated_count; }
       
   766   // The RedefineClasses() API can cause new method idnums to be needed
       
   767   // which will cause the caches to grow. Safety requires different
       
   768   // cache management logic if the caches can grow instead of just
       
   769   // going from NULL to non-NULL.
       
   770   bool idnum_can_increment() const      { return has_been_redefined(); }
   757   jmethodID* methods_jmethod_ids_acquire() const
   771   jmethodID* methods_jmethod_ids_acquire() const
   758          { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }
   772          { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }
   759   void release_set_methods_jmethod_ids(jmethodID* jmeths)
   773   void release_set_methods_jmethod_ids(jmethodID* jmeths)
   760          { OrderAccess::release_store_ptr(&_methods_jmethod_ids, jmeths); }
   774          { OrderAccess::release_store_ptr(&_methods_jmethod_ids, jmeths); }
   761 
   775