1289 void set_init_thread(Thread *thread) { _init_thread = thread; } 1290 1291 // The RedefineClasses() API can cause new method idnums to be needed 1292 // which will cause the caches to grow. Safety requires different 1293 // cache management logic if the caches can grow instead of just 1294 // going from NULL to non-NULL. 1295 bool idnum_can_increment() const { return has_been_redefined(); } 1296 inline jmethodID* methods_jmethod_ids_acquire() const; 1297 inline void release_set_methods_jmethod_ids(jmethodID* jmeths); 1298 1299 // Lock during initialization 1300 public: 1301 // Lock for (1) initialization; (2) access to the ConstantPool of this class. 1302 // Must be one per class and it has to be a VM internal object so java code 1303 // cannot lock it (like the mirror). 1304 // It has to be an object not a Mutex because it's held through java calls. 1305 oop init_lock() const; 1306 private: 1307 void fence_and_clear_init_lock(); 1308 1309 // Static methods that are used to implement member methods where an exposed this pointer 1310 // is needed due to possible GCs 1311 static bool link_class_impl (InstanceKlass* this_k, bool throw_verifyerror, TRAPS); 1312 static bool verify_code (InstanceKlass* this_k, bool throw_verifyerror, TRAPS); 1313 static void initialize_impl (InstanceKlass* this_k, TRAPS); 1314 static void initialize_super_interfaces (InstanceKlass* this_k, TRAPS); 1315 static void eager_initialize_impl (InstanceKlass* this_k); 1316 static void set_initialization_state_and_notify_impl (InstanceKlass* this_k, ClassState state, TRAPS); 1317 static void call_class_initializer_impl (InstanceKlass* this_k, TRAPS); 1318 static Klass* array_klass_impl (InstanceKlass* this_k, bool or_null, int n, TRAPS); 1319 static void do_local_static_fields_impl (InstanceKlass* this_k, void f(fieldDescriptor* fd, Handle, TRAPS), Handle, TRAPS); 1320 /* jni_id_for_impl for jfieldID only */ 1321 static JNIid* jni_id_for_impl (InstanceKlass* this_k, int offset); 1322 1323 // Returns the array class for the n'th dimension 1324 Klass* array_klass_impl(bool or_null, int n, TRAPS); 1325 1326 // Returns the array class with this class as element type 1327 Klass* array_klass_impl(bool or_null, TRAPS); 1328 1329 // find a local method (returns NULL if not found) 1330 Method* find_method_impl(const Symbol* name, 1331 const Symbol* signature, 1332 OverpassLookupMode overpass_mode, 1333 StaticLookupMode static_mode, 1334 PrivateLookupMode private_mode) const; 1335 1336 static Method* find_method_impl(const Array<Method*>* methods, 1337 const Symbol* name, 1338 const Symbol* signature, 1339 OverpassLookupMode overpass_mode, 1340 StaticLookupMode static_mode, 1341 PrivateLookupMode private_mode); | 1289 void set_init_thread(Thread *thread) { _init_thread = thread; } 1290 1291 // The RedefineClasses() API can cause new method idnums to be needed 1292 // which will cause the caches to grow. Safety requires different 1293 // cache management logic if the caches can grow instead of just 1294 // going from NULL to non-NULL. 1295 bool idnum_can_increment() const { return has_been_redefined(); } 1296 inline jmethodID* methods_jmethod_ids_acquire() const; 1297 inline void release_set_methods_jmethod_ids(jmethodID* jmeths); 1298 1299 // Lock during initialization 1300 public: 1301 // Lock for (1) initialization; (2) access to the ConstantPool of this class. 1302 // Must be one per class and it has to be a VM internal object so java code 1303 // cannot lock it (like the mirror). 1304 // It has to be an object not a Mutex because it's held through java calls. 1305 oop init_lock() const; 1306 private: 1307 void fence_and_clear_init_lock(); 1308 1309 bool link_class_impl (bool throw_verifyerror, TRAPS); 1310 bool verify_code (bool throw_verifyerror, TRAPS); 1311 void initialize_impl (TRAPS); 1312 void initialize_super_interfaces (TRAPS); 1313 void eager_initialize_impl (); 1314 void set_initialization_state_and_notify_impl (ClassState state, TRAPS); 1315 void call_class_initializer_impl (TRAPS); 1316 void do_local_static_fields_impl (void f(fieldDescriptor* fd, Handle, TRAPS), Handle, TRAPS); 1317 /* jni_id_for_impl for jfieldID only */ 1318 JNIid* jni_id_for_impl (int offset); 1319 1320 // Returns the array class for the n'th dimension 1321 Klass* array_klass_impl(bool or_null, int n, TRAPS); 1322 1323 // Returns the array class with this class as element type 1324 Klass* array_klass_impl(bool or_null, TRAPS); 1325 1326 // find a local method (returns NULL if not found) 1327 Method* find_method_impl(const Symbol* name, 1328 const Symbol* signature, 1329 OverpassLookupMode overpass_mode, 1330 StaticLookupMode static_mode, 1331 PrivateLookupMode private_mode) const; 1332 1333 static Method* find_method_impl(const Array<Method*>* methods, 1334 const Symbol* name, 1335 const Symbol* signature, 1336 OverpassLookupMode overpass_mode, 1337 StaticLookupMode static_mode, 1338 PrivateLookupMode private_mode); |