1/*
2 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#ifndef SHARE_OOPS_INSTANCEKLASS_HPP
26#define SHARE_OOPS_INSTANCEKLASS_HPP
27
28#include "classfile/classLoaderData.hpp"
29#include "memory/referenceType.hpp"
30#include "oops/annotations.hpp"
31#include "oops/constMethod.hpp"
32#include "oops/fieldInfo.hpp"
33#include "oops/instanceOop.hpp"
34#include "oops/klassVtable.hpp"
35#include "runtime/handles.hpp"
36#include "runtime/os.hpp"
37#include "utilities/accessFlags.hpp"
38#include "utilities/align.hpp"
39#include "utilities/macros.hpp"
40#if INCLUDE_JFR
41#include "jfr/support/jfrKlassExtension.hpp"
42#endif
43
44
45// An InstanceKlass is the VM level representation of a Java class.
46// It contains all information needed for at class at execution runtime.
47
48// InstanceKlass embedded field layout (after declared fields):
49// [EMBEDDED Java vtable ] size in words = vtable_len
50// [EMBEDDED nonstatic oop-map blocks] size in words = nonstatic_oop_map_size
51// The embedded nonstatic oop-map blocks are short pairs (offset, length)
52// indicating where oops are located in instances of this klass.
53// [EMBEDDED implementor of the interface] only exist for interface
54// [EMBEDDED unsafe_anonymous_host klass] only exist for an unsafe anonymous class (JSR 292 enabled)
55// [EMBEDDED fingerprint ] only if should_store_fingerprint()==true
56
57
58// forward declaration for class -- see below for definition
59#if INCLUDE_JVMTI
60class BreakpointInfo;
61#endif
62class ClassFileParser;
63class ClassFileStream;
64class KlassDepChange;
65class DependencyContext;
66class fieldDescriptor;
67class jniIdMapBase;
68class JNIid;
69class JvmtiCachedClassFieldMap;
70class nmethodBucket;
71class OopMapCache;
72class InterpreterOopMap;
73class PackageEntry;
74class ModuleEntry;
75
76// This is used in iterators below.
77class FieldClosure: public StackObj {
78public:
79 virtual void do_field(fieldDescriptor* fd) = 0;
80};
81
82#ifndef PRODUCT
83// Print fields.
84// If "obj" argument to constructor is NULL, prints static fields, otherwise prints non-static fields.
85class FieldPrinter: public FieldClosure {
86 oop _obj;
87 outputStream* _st;
88 public:
89 FieldPrinter(outputStream* st, oop obj = NULL) : _obj(obj), _st(st) {}
90 void do_field(fieldDescriptor* fd);
91};
92#endif // !PRODUCT
93
94// Describes where oops are located in instances of this klass.
95class OopMapBlock {
96 public:
97 // Byte offset of the first oop mapped by this block.
98 int offset() const { return _offset; }
99 void set_offset(int offset) { _offset = offset; }
100
101 // Number of oops in this block.
102 uint count() const { return _count; }
103 void set_count(uint count) { _count = count; }
104
105 // sizeof(OopMapBlock) in words.
106 static const int size_in_words() {
107 return align_up((int)sizeof(OopMapBlock), wordSize) >>
108 LogBytesPerWord;
109 }
110
111 private:
112 int _offset;
113 uint _count;
114};
115
116struct JvmtiCachedClassFileData;
117
118class InstanceKlass: public Klass {
119 friend class VMStructs;
120 friend class JVMCIVMStructs;
121 friend class ClassFileParser;
122 friend class CompileReplay;
123
124 public:
125 static const KlassID ID = InstanceKlassID;
126
127 protected:
128 InstanceKlass(const ClassFileParser& parser, unsigned kind, KlassID id = ID);
129
130 public:
131 InstanceKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
132
133 // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description
134 // of the class loading & initialization procedure, and the use of the states.
135 enum ClassState {
136 allocated, // allocated (but not yet linked)
137 loaded, // loaded and inserted in class hierarchy (but not linked yet)
138 linked, // successfully linked/verified (but not initialized yet)
139 being_initialized, // currently running class initializer
140 fully_initialized, // initialized (successfull final state)
141 initialization_error // error happened during initialization
142 };
143
144 private:
145 static InstanceKlass* allocate_instance_klass(const ClassFileParser& parser, TRAPS);
146
147 protected:
148 // If you add a new field that points to any metaspace object, you
149 // must add this field to InstanceKlass::metaspace_pointers_do().
150
151 // Annotations for this class
152 Annotations* _annotations;
153 // Package this class is defined in
154 PackageEntry* _package_entry;
155 // Array classes holding elements of this class.
156 Klass* volatile _array_klasses;
157 // Constant pool for this class.
158 ConstantPool* _constants;
159 // The InnerClasses attribute and EnclosingMethod attribute. The
160 // _inner_classes is an array of shorts. If the class has InnerClasses
161 // attribute, then the _inner_classes array begins with 4-tuples of shorts
162 // [inner_class_info_index, outer_class_info_index,
163 // inner_name_index, inner_class_access_flags] for the InnerClasses
164 // attribute. If the EnclosingMethod attribute exists, it occupies the
165 // last two shorts [class_index, method_index] of the array. If only
166 // the InnerClasses attribute exists, the _inner_classes array length is
167 // number_of_inner_classes * 4. If the class has both InnerClasses
168 // and EnclosingMethod attributes the _inner_classes array length is
169 // number_of_inner_classes * 4 + enclosing_method_attribute_size.
170 Array<jushort>* _inner_classes;
171
172 // The NestMembers attribute. An array of shorts, where each is a
173 // class info index for the class that is a nest member. This data
174 // has not been validated.
175 Array<jushort>* _nest_members;
176
177 // The NestHost attribute. The class info index for the class
178 // that is the nest-host of this class. This data has not been validated.
179 jushort _nest_host_index;
180
181 // Resolved nest-host klass: either true nest-host or self if we are not nested.
182 // By always being set it makes nest-member access checks simpler.
183 InstanceKlass* _nest_host;
184
185 // the source debug extension for this klass, NULL if not specified.
186 // Specified as UTF-8 string without terminating zero byte in the classfile,
187 // it is stored in the instanceklass as a NULL-terminated UTF-8 string
188 const char* _source_debug_extension;
189 // Array name derived from this class which needs unreferencing
190 // if this class is unloaded.
191 Symbol* _array_name;
192
193 // Number of heapOopSize words used by non-static fields in this klass
194 // (including inherited fields but after header_size()).
195 int _nonstatic_field_size;
196 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass
197 // Constant pool index to the utf8 entry of the Generic signature,
198 // or 0 if none.
199 u2 _generic_signature_index;
200 // Constant pool index to the utf8 entry for the name of source file
201 // containing this klass, 0 if not specified.
202 u2 _source_file_name_index;
203 u2 _static_oop_field_count;// number of static oop fields in this klass
204 u2 _java_fields_count; // The number of declared Java fields
205 int _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks
206
207 int _itable_len; // length of Java itable (in words)
208 // _is_marked_dependent can be set concurrently, thus cannot be part of the
209 // _misc_flags.
210 bool _is_marked_dependent; // used for marking during flushing and deoptimization
211 bool _is_being_redefined; // used for locking redefinition
212
213 // The low two bits of _misc_flags contains the kind field.
214 // This can be used to quickly discriminate among the four kinds of
215 // InstanceKlass.
216
217 static const unsigned _misc_kind_field_size = 2;
218 static const unsigned _misc_kind_field_pos = 0;
219 static const unsigned _misc_kind_field_mask = (1u << _misc_kind_field_size) - 1u;
220
221 static const unsigned _misc_kind_other = 0; // concrete InstanceKlass
222 static const unsigned _misc_kind_reference = 1; // InstanceRefKlass
223 static const unsigned _misc_kind_class_loader = 2; // InstanceClassLoaderKlass
224 static const unsigned _misc_kind_mirror = 3; // InstanceMirrorKlass
225
226 // Start after _misc_kind field.
227 enum {
228 _misc_rewritten = 1 << 2, // methods rewritten.
229 _misc_has_nonstatic_fields = 1 << 3, // for sizing with UseCompressedOops
230 _misc_should_verify_class = 1 << 4, // allow caching of preverification
231 _misc_is_unsafe_anonymous = 1 << 5, // has embedded _unsafe_anonymous_host field
232 _misc_is_contended = 1 << 6, // marked with contended annotation
233 _misc_has_nonstatic_concrete_methods = 1 << 7, // class/superclass/implemented interfaces has non-static, concrete methods
234 _misc_declares_nonstatic_concrete_methods = 1 << 8, // directly declares non-static, concrete methods
235 _misc_has_been_redefined = 1 << 9, // class has been redefined
236 _misc_has_passed_fingerprint_check = 1 << 10, // when this class was loaded, the fingerprint computed from its
237 // code source was found to be matching the value recorded by AOT.
238 _misc_is_scratch_class = 1 << 11, // class is the redefined scratch class
239 _misc_is_shared_boot_class = 1 << 12, // defining class loader is boot class loader
240 _misc_is_shared_platform_class = 1 << 13, // defining class loader is platform class loader
241 _misc_is_shared_app_class = 1 << 14, // defining class loader is app class loader
242 _misc_has_resolved_methods = 1 << 15 // resolved methods table entries added for this class
243 };
244 u2 loader_type_bits() {
245 return _misc_is_shared_boot_class|_misc_is_shared_platform_class|_misc_is_shared_app_class;
246 }
247 u2 _misc_flags;
248 u2 _minor_version; // minor version number of class file
249 u2 _major_version; // major version number of class file
250 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recursive initialization)
251 OopMapCache* volatile _oop_map_cache; // OopMapCache for all methods in the klass (allocated lazily)
252 JNIid* _jni_ids; // First JNI identifier for static fields in this class
253 jmethodID* volatile _methods_jmethod_ids; // jmethodIDs corresponding to method_idnum, or NULL if none
254 nmethodBucket* volatile _dep_context; // packed DependencyContext structure
255 uint64_t volatile _dep_context_last_cleaned;
256 nmethod* _osr_nmethods_head; // Head of list of on-stack replacement nmethods for this class
257#if INCLUDE_JVMTI
258 BreakpointInfo* _breakpoints; // bpt lists, managed by Method*
259 // Linked instanceKlasses of previous versions
260 InstanceKlass* _previous_versions;
261 // JVMTI fields can be moved to their own structure - see 6315920
262 // JVMTI: cached class file, before retransformable agent modified it in CFLH
263 JvmtiCachedClassFileData* _cached_class_file;
264#endif
265
266 volatile u2 _idnum_allocated_count; // JNI/JVMTI: increments with the addition of methods, old ids don't change
267
268 // Class states are defined as ClassState (see above).
269 // Place the _init_state here to utilize the unused 2-byte after
270 // _idnum_allocated_count.
271 u1 _init_state; // state of class
272 u1 _reference_type; // reference type
273
274 u2 _this_class_index; // constant pool entry
275#if INCLUDE_JVMTI
276 JvmtiCachedClassFieldMap* _jvmti_cached_class_field_map; // JVMTI: used during heap iteration
277#endif
278
279 NOT_PRODUCT(int _verify_count;) // to avoid redundant verifies
280
281 // Method array.
282 Array<Method*>* _methods;
283 // Default Method Array, concrete methods inherited from interfaces
284 Array<Method*>* _default_methods;
285 // Interfaces (InstanceKlass*s) this class declares locally to implement.
286 Array<InstanceKlass*>* _local_interfaces;
287 // Interfaces (InstanceKlass*s) this class implements transitively.
288 Array<InstanceKlass*>* _transitive_interfaces;
289 // Int array containing the original order of method in the class file (for JVMTI).
290 Array<int>* _method_ordering;
291 // Int array containing the vtable_indices for default_methods
292 // offset matches _default_methods offset
293 Array<int>* _default_vtable_indices;
294
295 // Instance and static variable information, starts with 6-tuples of shorts
296 // [access, name index, sig index, initval index, low_offset, high_offset]
297 // for all fields, followed by the generic signature data at the end of
298 // the array. Only fields with generic signature attributes have the generic
299 // signature data set in the array. The fields array looks like following:
300 //
301 // f1: [access, name index, sig index, initial value index, low_offset, high_offset]
302 // f2: [access, name index, sig index, initial value index, low_offset, high_offset]
303 // ...
304 // fn: [access, name index, sig index, initial value index, low_offset, high_offset]
305 // [generic signature index]
306 // [generic signature index]
307 // ...
308 Array<u2>* _fields;
309
310 // embedded Java vtable follows here
311 // embedded Java itables follows here
312 // embedded static fields follows here
313 // embedded nonstatic oop-map blocks follows here
314 // embedded implementor of this interface follows here
315 // The embedded implementor only exists if the current klass is an
316 // iterface. The possible values of the implementor fall into following
317 // three cases:
318 // NULL: no implementor.
319 // A Klass* that's not itself: one implementor.
320 // Itself: more than one implementors.
321 // embedded unsafe_anonymous_host klass follows here
322 // The embedded host klass only exists in an unsafe anonymous class for
323 // dynamic language support (JSR 292 enabled). The host class grants
324 // its access privileges to this class also. The host class is either
325 // named, or a previously loaded unsafe anonymous class. A non-anonymous class
326 // or an anonymous class loaded through normal classloading does not
327 // have this embedded field.
328 //
329
330 friend class SystemDictionary;
331
332 public:
333 u2 loader_type() {
334 return _misc_flags & loader_type_bits();
335 }
336
337 bool is_shared_boot_class() const {
338 return (_misc_flags & _misc_is_shared_boot_class) != 0;
339 }
340 bool is_shared_platform_class() const {
341 return (_misc_flags & _misc_is_shared_platform_class) != 0;
342 }
343 bool is_shared_app_class() const {
344 return (_misc_flags & _misc_is_shared_app_class) != 0;
345 }
346
347 void clear_class_loader_type() {
348 _misc_flags &= ~loader_type_bits();
349 }
350
351 void set_class_loader_type(s2 loader_type);
352
353 bool has_nonstatic_fields() const {
354 return (_misc_flags & _misc_has_nonstatic_fields) != 0;
355 }
356 void set_has_nonstatic_fields(bool b) {
357 if (b) {
358 _misc_flags |= _misc_has_nonstatic_fields;
359 } else {
360 _misc_flags &= ~_misc_has_nonstatic_fields;
361 }
362 }
363
364 // field sizes
365 int nonstatic_field_size() const { return _nonstatic_field_size; }
366 void set_nonstatic_field_size(int size) { _nonstatic_field_size = size; }
367
368 int static_field_size() const { return _static_field_size; }
369 void set_static_field_size(int size) { _static_field_size = size; }
370
371 int static_oop_field_count() const { return (int)_static_oop_field_count; }
372 void set_static_oop_field_count(u2 size) { _static_oop_field_count = size; }
373
374 // Java itable
375 int itable_length() const { return _itable_len; }
376 void set_itable_length(int len) { _itable_len = len; }
377
378 // array klasses
379 Klass* array_klasses() const { return _array_klasses; }
380 inline Klass* array_klasses_acquire() const; // load with acquire semantics
381 void set_array_klasses(Klass* k) { _array_klasses = k; }
382 inline void release_set_array_klasses(Klass* k); // store with release semantics
383
384 // methods
385 Array<Method*>* methods() const { return _methods; }
386 void set_methods(Array<Method*>* a) { _methods = a; }
387 Method* method_with_idnum(int idnum);
388 Method* method_with_orig_idnum(int idnum);
389 Method* method_with_orig_idnum(int idnum, int version);
390
391 // method ordering
392 Array<int>* method_ordering() const { return _method_ordering; }
393 void set_method_ordering(Array<int>* m) { _method_ordering = m; }
394 void copy_method_ordering(const intArray* m, TRAPS);
395
396 // default_methods
397 Array<Method*>* default_methods() const { return _default_methods; }
398 void set_default_methods(Array<Method*>* a) { _default_methods = a; }
399
400 // default method vtable_indices
401 Array<int>* default_vtable_indices() const { return _default_vtable_indices; }
402 void set_default_vtable_indices(Array<int>* v) { _default_vtable_indices = v; }
403 Array<int>* create_new_default_vtable_indices(int len, TRAPS);
404
405 // interfaces
406 Array<InstanceKlass*>* local_interfaces() const { return _local_interfaces; }
407 void set_local_interfaces(Array<InstanceKlass*>* a) {
408 guarantee(_local_interfaces == NULL || a == NULL, "Just checking");
409 _local_interfaces = a; }
410
411 Array<InstanceKlass*>* transitive_interfaces() const { return _transitive_interfaces; }
412 void set_transitive_interfaces(Array<InstanceKlass*>* a) {
413 guarantee(_transitive_interfaces == NULL || a == NULL, "Just checking");
414 _transitive_interfaces = a;
415 }
416
417 private:
418 friend class fieldDescriptor;
419 FieldInfo* field(int index) const { return FieldInfo::from_field_array(_fields, index); }
420
421 public:
422 int field_offset (int index) const { return field(index)->offset(); }
423 int field_access_flags(int index) const { return field(index)->access_flags(); }
424 Symbol* field_name (int index) const { return field(index)->name(constants()); }
425 Symbol* field_signature (int index) const { return field(index)->signature(constants()); }
426
427 // Number of Java declared fields
428 int java_fields_count() const { return (int)_java_fields_count; }
429
430 Array<u2>* fields() const { return _fields; }
431 void set_fields(Array<u2>* f, u2 java_fields_count) {
432 guarantee(_fields == NULL || f == NULL, "Just checking");
433 _fields = f;
434 _java_fields_count = java_fields_count;
435 }
436
437 // inner classes
438 Array<u2>* inner_classes() const { return _inner_classes; }
439 void set_inner_classes(Array<u2>* f) { _inner_classes = f; }
440
441 // nest members
442 Array<u2>* nest_members() const { return _nest_members; }
443 void set_nest_members(Array<u2>* m) { _nest_members = m; }
444
445 // nest-host index
446 jushort nest_host_index() const { return _nest_host_index; }
447 void set_nest_host_index(u2 i) { _nest_host_index = i; }
448
449private:
450 // Called to verify that k is a member of this nest - does not look at k's nest-host
451 bool has_nest_member(InstanceKlass* k, TRAPS) const;
452public:
453 // Returns nest-host class, resolving and validating it if needed
454 // Returns NULL if an exception occurs during loading, or validation fails
455 InstanceKlass* nest_host(Symbol* validationException, TRAPS);
456 // Check if this klass is a nestmate of k - resolves this nest-host and k's
457 bool has_nestmate_access_to(InstanceKlass* k, TRAPS);
458
459 enum InnerClassAttributeOffset {
460 // From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814
461 inner_class_inner_class_info_offset = 0,
462 inner_class_outer_class_info_offset = 1,
463 inner_class_inner_name_offset = 2,
464 inner_class_access_flags_offset = 3,
465 inner_class_next_offset = 4
466 };
467
468 enum EnclosingMethodAttributeOffset {
469 enclosing_method_class_index_offset = 0,
470 enclosing_method_method_index_offset = 1,
471 enclosing_method_attribute_size = 2
472 };
473
474 // method override check
475 bool is_override(const methodHandle& super_method, Handle targetclassloader, Symbol* targetclassname, TRAPS);
476
477 // package
478 PackageEntry* package() const { return _package_entry; }
479 ModuleEntry* module() const;
480 bool in_unnamed_package() const { return (_package_entry == NULL); }
481 void set_package(PackageEntry* p) { _package_entry = p; }
482 void set_package(ClassLoaderData* loader_data, TRAPS);
483 bool is_same_class_package(const Klass* class2) const;
484 bool is_same_class_package(oop other_class_loader, const Symbol* other_class_name) const;
485
486 // find an enclosing class
487 InstanceKlass* compute_enclosing_class(bool* inner_is_member, TRAPS) const;
488
489 // Find InnerClasses attribute and return outer_class_info_index & inner_name_index.
490 bool find_inner_classes_attr(int* ooff, int* noff, TRAPS) const;
491
492 private:
493 // Check prohibited package ("java/" only loadable by boot or platform loaders)
494 static void check_prohibited_package(Symbol* class_name,
495 ClassLoaderData* loader_data,
496 TRAPS);
497 public:
498 // initialization state
499 bool is_loaded() const { return _init_state >= loaded; }
500 bool is_linked() const { return _init_state >= linked; }
501 bool is_initialized() const { return _init_state == fully_initialized; }
502 bool is_not_initialized() const { return _init_state < being_initialized; }
503 bool is_being_initialized() const { return _init_state == being_initialized; }
504 bool is_in_error_state() const { return _init_state == initialization_error; }
505 bool is_reentrant_initialization(Thread *thread) { return thread == _init_thread; }
506 ClassState init_state() { return (ClassState)_init_state; }
507 bool is_rewritten() const { return (_misc_flags & _misc_rewritten) != 0; }
508
509 // defineClass specified verification
510 bool should_verify_class() const {
511 return (_misc_flags & _misc_should_verify_class) != 0;
512 }
513 void set_should_verify_class(bool value) {
514 if (value) {
515 _misc_flags |= _misc_should_verify_class;
516 } else {
517 _misc_flags &= ~_misc_should_verify_class;
518 }
519 }
520
521 // marking
522 bool is_marked_dependent() const { return _is_marked_dependent; }
523 void set_is_marked_dependent(bool value) { _is_marked_dependent = value; }
524
525 // initialization (virtuals from Klass)
526 bool should_be_initialized() const; // means that initialize should be called
527 void initialize(TRAPS);
528 void link_class(TRAPS);
529 bool link_class_or_fail(TRAPS); // returns false on failure
530 void rewrite_class(TRAPS);
531 void link_methods(TRAPS);
532 Method* class_initializer() const;
533
534 // set the class to initialized if no static initializer is present
535 void eager_initialize(Thread *thread);
536
537 // reference type
538 ReferenceType reference_type() const { return (ReferenceType)_reference_type; }
539 void set_reference_type(ReferenceType t) {
540 assert(t == (u1)t, "overflow");
541 _reference_type = (u1)t;
542 }
543
544 // this class cp index
545 u2 this_class_index() const { return _this_class_index; }
546 void set_this_class_index(u2 index) { _this_class_index = index; }
547
548 static ByteSize reference_type_offset() { return in_ByteSize(offset_of(InstanceKlass, _reference_type)); }
549
550 // find local field, returns true if found
551 bool find_local_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const;
552 // find field in direct superinterfaces, returns the interface in which the field is defined
553 Klass* find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const;
554 // find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined
555 Klass* find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const;
556 // find instance or static fields according to JVM spec 5.4.3.2, returns the klass in which the field is defined
557 Klass* find_field(Symbol* name, Symbol* sig, bool is_static, fieldDescriptor* fd) const;
558
559 // find a non-static or static field given its offset within the class.
560 bool contains_field_offset(int offset) {
561 return instanceOopDesc::contains_field_offset(offset, nonstatic_field_size());
562 }
563
564 bool find_local_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const;
565 bool find_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const;
566
567 // find a local method (returns NULL if not found)
568 Method* find_method(const Symbol* name, const Symbol* signature) const;
569 static Method* find_method(const Array<Method*>* methods,
570 const Symbol* name,
571 const Symbol* signature);
572
573 // find a local method, but skip static methods
574 Method* find_instance_method(const Symbol* name, const Symbol* signature,
575 PrivateLookupMode private_mode = find_private) const;
576 static Method* find_instance_method(const Array<Method*>* methods,
577 const Symbol* name,
578 const Symbol* signature,
579 PrivateLookupMode private_mode = find_private);
580
581 // find a local method (returns NULL if not found)
582 Method* find_local_method(const Symbol* name,
583 const Symbol* signature,
584 OverpassLookupMode overpass_mode,
585 StaticLookupMode static_mode,
586 PrivateLookupMode private_mode) const;
587
588 // find a local method from given methods array (returns NULL if not found)
589 static Method* find_local_method(const Array<Method*>* methods,
590 const Symbol* name,
591 const Symbol* signature,
592 OverpassLookupMode overpass_mode,
593 StaticLookupMode static_mode,
594 PrivateLookupMode private_mode);
595
596 // find a local method index in methods or default_methods (returns -1 if not found)
597 static int find_method_index(const Array<Method*>* methods,
598 const Symbol* name,
599 const Symbol* signature,
600 OverpassLookupMode overpass_mode,
601 StaticLookupMode static_mode,
602 PrivateLookupMode private_mode);
603
604 // lookup operation (returns NULL if not found)
605 Method* uncached_lookup_method(const Symbol* name,
606 const Symbol* signature,
607 OverpassLookupMode overpass_mode,
608 PrivateLookupMode private_mode = find_private) const;
609
610 // lookup a method in all the interfaces that this class implements
611 // (returns NULL if not found)
612 Method* lookup_method_in_all_interfaces(Symbol* name, Symbol* signature, DefaultsLookupMode defaults_mode) const;
613
614 // lookup a method in local defaults then in all interfaces
615 // (returns NULL if not found)
616 Method* lookup_method_in_ordered_interfaces(Symbol* name, Symbol* signature) const;
617
618 // Find method indices by name. If a method with the specified name is
619 // found the index to the first method is returned, and 'end' is filled in
620 // with the index of first non-name-matching method. If no method is found
621 // -1 is returned.
622 int find_method_by_name(const Symbol* name, int* end) const;
623 static int find_method_by_name(const Array<Method*>* methods,
624 const Symbol* name, int* end);
625
626 // constant pool
627 ConstantPool* constants() const { return _constants; }
628 void set_constants(ConstantPool* c) { _constants = c; }
629
630 // protection domain
631 oop protection_domain() const;
632
633 // signers
634 objArrayOop signers() const;
635
636 // host class
637 InstanceKlass* unsafe_anonymous_host() const {
638 InstanceKlass** hk = adr_unsafe_anonymous_host();
639 if (hk == NULL) {
640 assert(!is_unsafe_anonymous(), "Unsafe anonymous classes have host klasses");
641 return NULL;
642 } else {
643 assert(*hk != NULL, "host klass should always be set if the address is not null");
644 assert(is_unsafe_anonymous(), "Only unsafe anonymous classes have host klasses");
645 return *hk;
646 }
647 }
648 void set_unsafe_anonymous_host(const InstanceKlass* host) {
649 assert(is_unsafe_anonymous(), "not unsafe anonymous");
650 const InstanceKlass** addr = (const InstanceKlass **)adr_unsafe_anonymous_host();
651 assert(addr != NULL, "no reversed space");
652 if (addr != NULL) {
653 *addr = host;
654 }
655 }
656 bool is_unsafe_anonymous() const {
657 return (_misc_flags & _misc_is_unsafe_anonymous) != 0;
658 }
659 void set_is_unsafe_anonymous(bool value) {
660 if (value) {
661 _misc_flags |= _misc_is_unsafe_anonymous;
662 } else {
663 _misc_flags &= ~_misc_is_unsafe_anonymous;
664 }
665 }
666
667 bool is_contended() const {
668 return (_misc_flags & _misc_is_contended) != 0;
669 }
670 void set_is_contended(bool value) {
671 if (value) {
672 _misc_flags |= _misc_is_contended;
673 } else {
674 _misc_flags &= ~_misc_is_contended;
675 }
676 }
677
678 // source file name
679 Symbol* source_file_name() const {
680 return (_source_file_name_index == 0) ?
681 (Symbol*)NULL : _constants->symbol_at(_source_file_name_index);
682 }
683 u2 source_file_name_index() const {
684 return _source_file_name_index;
685 }
686 void set_source_file_name_index(u2 sourcefile_index) {
687 _source_file_name_index = sourcefile_index;
688 }
689
690 // minor and major version numbers of class file
691 u2 minor_version() const { return _minor_version; }
692 void set_minor_version(u2 minor_version) { _minor_version = minor_version; }
693 u2 major_version() const { return _major_version; }
694 void set_major_version(u2 major_version) { _major_version = major_version; }
695
696 // source debug extension
697 const char* source_debug_extension() const { return _source_debug_extension; }
698 void set_source_debug_extension(const char* array, int length);
699
700 // symbol unloading support (refcount already added)
701 Symbol* array_name() { return _array_name; }
702 void set_array_name(Symbol* name) { assert(_array_name == NULL || name == NULL, "name already created"); _array_name = name; }
703
704 // nonstatic oop-map blocks
705 static int nonstatic_oop_map_size(unsigned int oop_map_count) {
706 return oop_map_count * OopMapBlock::size_in_words();
707 }
708 unsigned int nonstatic_oop_map_count() const {
709 return _nonstatic_oop_map_size / OopMapBlock::size_in_words();
710 }
711 int nonstatic_oop_map_size() const { return _nonstatic_oop_map_size; }
712 void set_nonstatic_oop_map_size(int words) {
713 _nonstatic_oop_map_size = words;
714 }
715
716#if INCLUDE_JVMTI
717 // Redefinition locking. Class can only be redefined by one thread at a time.
718 bool is_being_redefined() const { return _is_being_redefined; }
719 void set_is_being_redefined(bool value) { _is_being_redefined = value; }
720
721 // RedefineClasses() support for previous versions:
722 void add_previous_version(InstanceKlass* ik, int emcp_method_count);
723 void purge_previous_version_list();
724
725 InstanceKlass* previous_versions() const { return _previous_versions; }
726#else
727 InstanceKlass* previous_versions() const { return NULL; }
728#endif
729
730 InstanceKlass* get_klass_version(int version) {
731 for (InstanceKlass* ik = this; ik != NULL; ik = ik->previous_versions()) {
732 if (ik->constants()->version() == version) {
733 return ik;
734 }
735 }
736 return NULL;
737 }
738
739 bool has_been_redefined() const {
740 return (_misc_flags & _misc_has_been_redefined) != 0;
741 }
742 void set_has_been_redefined() {
743 _misc_flags |= _misc_has_been_redefined;
744 }
745
746 bool has_passed_fingerprint_check() const {
747 return (_misc_flags & _misc_has_passed_fingerprint_check) != 0;
748 }
749 void set_has_passed_fingerprint_check(bool b) {
750 if (b) {
751 _misc_flags |= _misc_has_passed_fingerprint_check;
752 } else {
753 _misc_flags &= ~_misc_has_passed_fingerprint_check;
754 }
755 }
756 bool supers_have_passed_fingerprint_checks();
757
758 static bool should_store_fingerprint(bool is_unsafe_anonymous);
759 bool should_store_fingerprint() const { return should_store_fingerprint(is_unsafe_anonymous()); }
760 bool has_stored_fingerprint() const;
761 uint64_t get_stored_fingerprint() const;
762 void store_fingerprint(uint64_t fingerprint);
763
764 bool is_scratch_class() const {
765 return (_misc_flags & _misc_is_scratch_class) != 0;
766 }
767
768 void set_is_scratch_class() {
769 _misc_flags |= _misc_is_scratch_class;
770 }
771
772 bool has_resolved_methods() const {
773 return (_misc_flags & _misc_has_resolved_methods) != 0;
774 }
775
776 void set_has_resolved_methods() {
777 _misc_flags |= _misc_has_resolved_methods;
778 }
779private:
780
781 void set_kind(unsigned kind) {
782 assert(kind <= _misc_kind_field_mask, "Invalid InstanceKlass kind");
783 unsigned fmask = _misc_kind_field_mask << _misc_kind_field_pos;
784 unsigned flags = _misc_flags & ~fmask;
785 _misc_flags = (flags | (kind << _misc_kind_field_pos));
786 }
787
788 bool is_kind(unsigned desired) const {
789 unsigned kind = (_misc_flags >> _misc_kind_field_pos) & _misc_kind_field_mask;
790 return kind == desired;
791 }
792
793public:
794
795 // Other is anything that is not one of the more specialized kinds of InstanceKlass.
796 bool is_other_instance_klass() const { return is_kind(_misc_kind_other); }
797 bool is_reference_instance_klass() const { return is_kind(_misc_kind_reference); }
798 bool is_mirror_instance_klass() const { return is_kind(_misc_kind_mirror); }
799 bool is_class_loader_instance_klass() const { return is_kind(_misc_kind_class_loader); }
800
801#if INCLUDE_JVMTI
802
803 void init_previous_versions() {
804 _previous_versions = NULL;
805 }
806
807 private:
808 static bool _has_previous_versions;
809 public:
810 static void purge_previous_versions(InstanceKlass* ik) {
811 if (ik->has_been_redefined()) {
812 ik->purge_previous_version_list();
813 }
814 }
815
816 static bool has_previous_versions_and_reset();
817 static bool has_previous_versions() { return _has_previous_versions; }
818
819 // JVMTI: Support for caching a class file before it is modified by an agent that can do retransformation
820 void set_cached_class_file(JvmtiCachedClassFileData *data) {
821 _cached_class_file = data;
822 }
823 JvmtiCachedClassFileData * get_cached_class_file();
824 jint get_cached_class_file_len();
825 unsigned char * get_cached_class_file_bytes();
826
827 // JVMTI: Support for caching of field indices, types, and offsets
828 void set_jvmti_cached_class_field_map(JvmtiCachedClassFieldMap* descriptor) {
829 _jvmti_cached_class_field_map = descriptor;
830 }
831 JvmtiCachedClassFieldMap* jvmti_cached_class_field_map() const {
832 return _jvmti_cached_class_field_map;
833 }
834#else // INCLUDE_JVMTI
835
836 static void purge_previous_versions(InstanceKlass* ik) { return; };
837 static bool has_previous_versions_and_reset() { return false; }
838
839 void set_cached_class_file(JvmtiCachedClassFileData *data) {
840 assert(data == NULL, "unexpected call with JVMTI disabled");
841 }
842 JvmtiCachedClassFileData * get_cached_class_file() { return (JvmtiCachedClassFileData *)NULL; }
843
844#endif // INCLUDE_JVMTI
845
846 bool has_nonstatic_concrete_methods() const {
847 return (_misc_flags & _misc_has_nonstatic_concrete_methods) != 0;
848 }
849 void set_has_nonstatic_concrete_methods(bool b) {
850 if (b) {
851 _misc_flags |= _misc_has_nonstatic_concrete_methods;
852 } else {
853 _misc_flags &= ~_misc_has_nonstatic_concrete_methods;
854 }
855 }
856
857 bool declares_nonstatic_concrete_methods() const {
858 return (_misc_flags & _misc_declares_nonstatic_concrete_methods) != 0;
859 }
860 void set_declares_nonstatic_concrete_methods(bool b) {
861 if (b) {
862 _misc_flags |= _misc_declares_nonstatic_concrete_methods;
863 } else {
864 _misc_flags &= ~_misc_declares_nonstatic_concrete_methods;
865 }
866 }
867
868 // for adding methods, ConstMethod::UNSET_IDNUM means no more ids available
869 inline u2 next_method_idnum();
870 void set_initial_method_idnum(u2 value) { _idnum_allocated_count = value; }
871
872 // generics support
873 Symbol* generic_signature() const {
874 return (_generic_signature_index == 0) ?
875 (Symbol*)NULL : _constants->symbol_at(_generic_signature_index);
876 }
877 u2 generic_signature_index() const {
878 return _generic_signature_index;
879 }
880 void set_generic_signature_index(u2 sig_index) {
881 _generic_signature_index = sig_index;
882 }
883
884 u2 enclosing_method_data(int offset) const;
885 u2 enclosing_method_class_index() const {
886 return enclosing_method_data(enclosing_method_class_index_offset);
887 }
888 u2 enclosing_method_method_index() {
889 return enclosing_method_data(enclosing_method_method_index_offset);
890 }
891 void set_enclosing_method_indices(u2 class_index,
892 u2 method_index);
893
894 // jmethodID support
895 jmethodID get_jmethod_id(const methodHandle& method_h);
896 jmethodID get_jmethod_id_fetch_or_update(size_t idnum,
897 jmethodID new_id, jmethodID* new_jmeths,
898 jmethodID* to_dealloc_id_p,
899 jmethodID** to_dealloc_jmeths_p);
900 static void get_jmethod_id_length_value(jmethodID* cache, size_t idnum,
901 size_t *length_p, jmethodID* id_p);
902 void ensure_space_for_methodids(int start_offset = 0);
903 jmethodID jmethod_id_or_null(Method* method);
904
905 // annotations support
906 Annotations* annotations() const { return _annotations; }
907 void set_annotations(Annotations* anno) { _annotations = anno; }
908
909 AnnotationArray* class_annotations() const {
910 return (_annotations != NULL) ? _annotations->class_annotations() : NULL;
911 }
912 Array<AnnotationArray*>* fields_annotations() const {
913 return (_annotations != NULL) ? _annotations->fields_annotations() : NULL;
914 }
915 AnnotationArray* class_type_annotations() const {
916 return (_annotations != NULL) ? _annotations->class_type_annotations() : NULL;
917 }
918 Array<AnnotationArray*>* fields_type_annotations() const {
919 return (_annotations != NULL) ? _annotations->fields_type_annotations() : NULL;
920 }
921 // allocation
922 instanceOop allocate_instance(TRAPS);
923
924 // additional member function to return a handle
925 instanceHandle allocate_instance_handle(TRAPS);
926
927 objArrayOop allocate_objArray(int n, int length, TRAPS);
928 // Helper function
929 static instanceOop register_finalizer(instanceOop i, TRAPS);
930
931 // Check whether reflection/jni/jvm code is allowed to instantiate this class;
932 // if not, throw either an Error or an Exception.
933 virtual void check_valid_for_instantiation(bool throwError, TRAPS);
934
935 // initialization
936 void call_class_initializer(TRAPS);
937 void set_initialization_state_and_notify(ClassState state, TRAPS);
938
939 // OopMapCache support
940 OopMapCache* oop_map_cache() { return _oop_map_cache; }
941 void set_oop_map_cache(OopMapCache *cache) { _oop_map_cache = cache; }
942 void mask_for(const methodHandle& method, int bci, InterpreterOopMap* entry);
943
944 // JNI identifier support (for static fields - for jni performance)
945 JNIid* jni_ids() { return _jni_ids; }
946 void set_jni_ids(JNIid* ids) { _jni_ids = ids; }
947 JNIid* jni_id_for(int offset);
948
949 // maintenance of deoptimization dependencies
950 inline DependencyContext dependencies();
951 int mark_dependent_nmethods(KlassDepChange& changes);
952 void add_dependent_nmethod(nmethod* nm);
953 void remove_dependent_nmethod(nmethod* nm);
954 void clean_dependency_context();
955
956 // On-stack replacement support
957 nmethod* osr_nmethods_head() const { return _osr_nmethods_head; };
958 void set_osr_nmethods_head(nmethod* h) { _osr_nmethods_head = h; };
959 void add_osr_nmethod(nmethod* n);
960 bool remove_osr_nmethod(nmethod* n);
961 int mark_osr_nmethods(const Method* m);
962 nmethod* lookup_osr_nmethod(const Method* m, int bci, int level, bool match_level) const;
963
964#if INCLUDE_JVMTI
965 // Breakpoint support (see methods on Method* for details)
966 BreakpointInfo* breakpoints() const { return _breakpoints; };
967 void set_breakpoints(BreakpointInfo* bps) { _breakpoints = bps; };
968#endif
969
970 // support for stub routines
971 static ByteSize init_state_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_state)); }
972 JFR_ONLY(DEFINE_KLASS_TRACE_ID_OFFSET;)
973 static ByteSize init_thread_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_thread)); }
974
975 // subclass/subinterface checks
976 bool implements_interface(Klass* k) const;
977 bool is_same_or_direct_interface(Klass* k) const;
978
979#ifdef ASSERT
980 // check whether this class or one of its superclasses was redefined
981 bool has_redefined_this_or_super() const;
982#endif
983
984 // Access to the implementor of an interface.
985 Klass* implementor() const;
986 void set_implementor(Klass* k);
987 int nof_implementors() const;
988 void add_implementor(Klass* k); // k is a new class that implements this interface
989 void init_implementor(); // initialize
990
991 // link this class into the implementors list of every interface it implements
992 void process_interfaces(Thread *thread);
993
994 // virtual operations from Klass
995 bool is_leaf_class() const { return _subklass == NULL; }
996 GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots,
997 Array<InstanceKlass*>* transitive_interfaces);
998 bool can_be_primary_super_slow() const;
999 int oop_size(oop obj) const { return size_helper(); }
1000 // slow because it's a virtual call and used for verifying the layout_helper.
1001 // Using the layout_helper bits, we can call is_instance_klass without a virtual call.
1002 DEBUG_ONLY(bool is_instance_klass_slow() const { return true; })
1003
1004 // Iterators
1005 void do_local_static_fields(FieldClosure* cl);
1006 void do_nonstatic_fields(FieldClosure* cl); // including inherited fields
1007 void do_local_static_fields(void f(fieldDescriptor*, Handle, TRAPS), Handle, TRAPS);
1008
1009 void methods_do(void f(Method* method));
1010 void array_klasses_do(void f(Klass* k));
1011 void array_klasses_do(void f(Klass* k, TRAPS), TRAPS);
1012
1013 static InstanceKlass* cast(Klass* k) {
1014 return const_cast<InstanceKlass*>(cast(const_cast<const Klass*>(k)));
1015 }
1016
1017 static const InstanceKlass* cast(const Klass* k) {
1018 assert(k != NULL, "k should not be null");
1019 assert(k->is_instance_klass(), "cast to InstanceKlass");
1020 return static_cast<const InstanceKlass*>(k);
1021 }
1022
1023 virtual InstanceKlass* java_super() const {
1024 return (super() == NULL) ? NULL : cast(super());
1025 }
1026
1027 // Sizing (in words)
1028 static int header_size() { return sizeof(InstanceKlass)/wordSize; }
1029
1030 static int size(int vtable_length, int itable_length,
1031 int nonstatic_oop_map_size,
1032 bool is_interface, bool is_unsafe_anonymous, bool has_stored_fingerprint) {
1033 return align_metadata_size(header_size() +
1034 vtable_length +
1035 itable_length +
1036 nonstatic_oop_map_size +
1037 (is_interface ? (int)sizeof(Klass*)/wordSize : 0) +
1038 (is_unsafe_anonymous ? (int)sizeof(Klass*)/wordSize : 0) +
1039 (has_stored_fingerprint ? (int)sizeof(uint64_t*)/wordSize : 0));
1040 }
1041 int size() const { return size(vtable_length(),
1042 itable_length(),
1043 nonstatic_oop_map_size(),
1044 is_interface(),
1045 is_unsafe_anonymous(),
1046 has_stored_fingerprint());
1047 }
1048#if INCLUDE_SERVICES
1049 virtual void collect_statistics(KlassSizeStats *sz) const;
1050#endif
1051
1052 intptr_t* start_of_itable() const { return (intptr_t*)start_of_vtable() + vtable_length(); }
1053 intptr_t* end_of_itable() const { return start_of_itable() + itable_length(); }
1054
1055 int itable_offset_in_words() const { return start_of_itable() - (intptr_t*)this; }
1056
1057 oop static_field_base_raw() { return java_mirror(); }
1058
1059 OopMapBlock* start_of_nonstatic_oop_maps() const {
1060 return (OopMapBlock*)(start_of_itable() + itable_length());
1061 }
1062
1063 Klass** end_of_nonstatic_oop_maps() const {
1064 return (Klass**)(start_of_nonstatic_oop_maps() +
1065 nonstatic_oop_map_count());
1066 }
1067
1068 Klass* volatile* adr_implementor() const {
1069 if (is_interface()) {
1070 return (Klass* volatile*)end_of_nonstatic_oop_maps();
1071 } else {
1072 return NULL;
1073 }
1074 };
1075
1076 InstanceKlass** adr_unsafe_anonymous_host() const {
1077 if (is_unsafe_anonymous()) {
1078 InstanceKlass** adr_impl = (InstanceKlass**)adr_implementor();
1079 if (adr_impl != NULL) {
1080 return adr_impl + 1;
1081 } else {
1082 return (InstanceKlass **)end_of_nonstatic_oop_maps();
1083 }
1084 } else {
1085 return NULL;
1086 }
1087 }
1088
1089 address adr_fingerprint() const {
1090 if (has_stored_fingerprint()) {
1091 InstanceKlass** adr_host = adr_unsafe_anonymous_host();
1092 if (adr_host != NULL) {
1093 return (address)(adr_host + 1);
1094 }
1095
1096 Klass* volatile* adr_impl = adr_implementor();
1097 if (adr_impl != NULL) {
1098 return (address)(adr_impl + 1);
1099 }
1100
1101 return (address)end_of_nonstatic_oop_maps();
1102 } else {
1103 return NULL;
1104 }
1105 }
1106
1107 // Use this to return the size of an instance in heap words:
1108 int size_helper() const {
1109 return layout_helper_to_size_helper(layout_helper());
1110 }
1111
1112 // This bit is initialized in classFileParser.cpp.
1113 // It is false under any of the following conditions:
1114 // - the class is abstract (including any interface)
1115 // - the class has a finalizer (if !RegisterFinalizersAtInit)
1116 // - the class size is larger than FastAllocateSizeLimit
1117 // - the class is java/lang/Class, which cannot be allocated directly
1118 bool can_be_fastpath_allocated() const {
1119 return !layout_helper_needs_slow_path(layout_helper());
1120 }
1121
1122 // Java itable
1123 klassItable itable() const; // return klassItable wrapper
1124 Method* method_at_itable(Klass* holder, int index, TRAPS);
1125
1126#if INCLUDE_JVMTI
1127 void adjust_default_methods(bool* trace_name_printed);
1128#endif // INCLUDE_JVMTI
1129
1130 void clean_weak_instanceklass_links();
1131 private:
1132 void clean_implementors_list();
1133 void clean_method_data();
1134
1135 public:
1136 // Explicit metaspace deallocation of fields
1137 // For RedefineClasses and class file parsing errors, we need to deallocate
1138 // instanceKlasses and the metadata they point to.
1139 void deallocate_contents(ClassLoaderData* loader_data);
1140 static void deallocate_methods(ClassLoaderData* loader_data,
1141 Array<Method*>* methods);
1142 void static deallocate_interfaces(ClassLoaderData* loader_data,
1143 const Klass* super_klass,
1144 Array<InstanceKlass*>* local_interfaces,
1145 Array<InstanceKlass*>* transitive_interfaces);
1146
1147 // The constant pool is on stack if any of the methods are executing or
1148 // referenced by handles.
1149 bool on_stack() const { return _constants->on_stack(); }
1150
1151 // callbacks for actions during class unloading
1152 static void unload_class(InstanceKlass* ik);
1153 static void release_C_heap_structures(InstanceKlass* ik);
1154
1155 // Naming
1156 const char* signature_name() const;
1157 static Symbol* package_from_name(const Symbol* name, TRAPS);
1158
1159 // Oop fields (and metadata) iterators
1160 //
1161 // The InstanceKlass iterators also visits the Object's klass.
1162
1163 // Forward iteration
1164 public:
1165 // Iterate over all oop fields in the oop maps.
1166 template <typename T, class OopClosureType>
1167 inline void oop_oop_iterate_oop_maps(oop obj, OopClosureType* closure);
1168
1169 // Iterate over all oop fields and metadata.
1170 template <typename T, class OopClosureType>
1171 inline void oop_oop_iterate(oop obj, OopClosureType* closure);
1172
1173 // Iterate over all oop fields in one oop map.
1174 template <typename T, class OopClosureType>
1175 inline void oop_oop_iterate_oop_map(OopMapBlock* map, oop obj, OopClosureType* closure);
1176
1177
1178 // Reverse iteration
1179 // Iterate over all oop fields and metadata.
1180 template <typename T, class OopClosureType>
1181 inline void oop_oop_iterate_reverse(oop obj, OopClosureType* closure);
1182
1183 private:
1184 // Iterate over all oop fields in the oop maps.
1185 template <typename T, class OopClosureType>
1186 inline void oop_oop_iterate_oop_maps_reverse(oop obj, OopClosureType* closure);
1187
1188 // Iterate over all oop fields in one oop map.
1189 template <typename T, class OopClosureType>
1190 inline void oop_oop_iterate_oop_map_reverse(OopMapBlock* map, oop obj, OopClosureType* closure);
1191
1192
1193 // Bounded range iteration
1194 public:
1195 // Iterate over all oop fields in the oop maps.
1196 template <typename T, class OopClosureType>
1197 inline void oop_oop_iterate_oop_maps_bounded(oop obj, OopClosureType* closure, MemRegion mr);
1198
1199 // Iterate over all oop fields and metadata.
1200 template <typename T, class OopClosureType>
1201 inline void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr);
1202
1203 private:
1204 // Iterate over all oop fields in one oop map.
1205 template <typename T, class OopClosureType>
1206 inline void oop_oop_iterate_oop_map_bounded(OopMapBlock* map, oop obj, OopClosureType* closure, MemRegion mr);
1207
1208
1209 public:
1210 u2 idnum_allocated_count() const { return _idnum_allocated_count; }
1211
1212public:
1213 void set_in_error_state() {
1214 assert(DumpSharedSpaces, "only call this when dumping archive");
1215 _init_state = initialization_error;
1216 }
1217 bool check_sharing_error_state();
1218
1219private:
1220 // initialization state
1221 void set_init_state(ClassState state);
1222 void set_rewritten() { _misc_flags |= _misc_rewritten; }
1223 void set_init_thread(Thread *thread) { _init_thread = thread; }
1224
1225 // The RedefineClasses() API can cause new method idnums to be needed
1226 // which will cause the caches to grow. Safety requires different
1227 // cache management logic if the caches can grow instead of just
1228 // going from NULL to non-NULL.
1229 bool idnum_can_increment() const { return has_been_redefined(); }
1230 inline jmethodID* methods_jmethod_ids_acquire() const;
1231 inline void release_set_methods_jmethod_ids(jmethodID* jmeths);
1232
1233 // Lock during initialization
1234public:
1235 // Lock for (1) initialization; (2) access to the ConstantPool of this class.
1236 // Must be one per class and it has to be a VM internal object so java code
1237 // cannot lock it (like the mirror).
1238 // It has to be an object not a Mutex because it's held through java calls.
1239 oop init_lock() const;
1240private:
1241 void fence_and_clear_init_lock();
1242
1243 bool link_class_impl (TRAPS);
1244 bool verify_code (TRAPS);
1245 void initialize_impl (TRAPS);
1246 void initialize_super_interfaces (TRAPS);
1247 void eager_initialize_impl ();
1248 /* jni_id_for_impl for jfieldID only */
1249 JNIid* jni_id_for_impl (int offset);
1250
1251 // Returns the array class for the n'th dimension
1252 Klass* array_klass_impl(bool or_null, int n, TRAPS);
1253
1254 // Returns the array class with this class as element type
1255 Klass* array_klass_impl(bool or_null, TRAPS);
1256
1257 // find a local method (returns NULL if not found)
1258 Method* find_method_impl(const Symbol* name,
1259 const Symbol* signature,
1260 OverpassLookupMode overpass_mode,
1261 StaticLookupMode static_mode,
1262 PrivateLookupMode private_mode) const;
1263
1264 static Method* find_method_impl(const Array<Method*>* methods,
1265 const Symbol* name,
1266 const Symbol* signature,
1267 OverpassLookupMode overpass_mode,
1268 StaticLookupMode static_mode,
1269 PrivateLookupMode private_mode);
1270
1271 // Free CHeap allocated fields.
1272 void release_C_heap_structures();
1273
1274#if INCLUDE_JVMTI
1275 // RedefineClasses support
1276 void link_previous_versions(InstanceKlass* pv) { _previous_versions = pv; }
1277 void mark_newly_obsolete_methods(Array<Method*>* old_methods, int emcp_method_count);
1278#endif
1279public:
1280 // CDS support - remove and restore oops from metadata. Oops are not shared.
1281 virtual void remove_unshareable_info();
1282 virtual void remove_java_mirror();
1283 virtual void restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS);
1284
1285 // jvm support
1286 jint compute_modifier_flags(TRAPS) const;
1287
1288public:
1289 // JVMTI support
1290 jint jvmti_class_status() const;
1291
1292 virtual void metaspace_pointers_do(MetaspaceClosure* iter);
1293
1294 public:
1295 // Printing
1296#ifndef PRODUCT
1297 void print_on(outputStream* st) const;
1298#endif
1299 void print_value_on(outputStream* st) const;
1300
1301 void oop_print_value_on(oop obj, outputStream* st);
1302
1303#ifndef PRODUCT
1304 void oop_print_on (oop obj, outputStream* st);
1305
1306 void print_dependent_nmethods(bool verbose = false);
1307 bool is_dependent_nmethod(nmethod* nm);
1308 bool verify_itable_index(int index);
1309#endif
1310
1311 const char* internal_name() const;
1312
1313 // Verification
1314 void verify_on(outputStream* st);
1315
1316 void oop_verify_on(oop obj, outputStream* st);
1317
1318 // Logging
1319 void print_class_load_logging(ClassLoaderData* loader_data,
1320 const char* module_name,
1321 const ClassFileStream* cfs) const;
1322};
1323
1324// for adding methods
1325// UNSET_IDNUM return means no more ids available
1326inline u2 InstanceKlass::next_method_idnum() {
1327 if (_idnum_allocated_count == ConstMethod::MAX_IDNUM) {
1328 return ConstMethod::UNSET_IDNUM; // no more ids available
1329 } else {
1330 return _idnum_allocated_count++;
1331 }
1332}
1333
1334
1335/* JNIid class for jfieldIDs only */
1336class JNIid: public CHeapObj<mtClass> {
1337 friend class VMStructs;
1338 private:
1339 Klass* _holder;
1340 JNIid* _next;
1341 int _offset;
1342#ifdef ASSERT
1343 bool _is_static_field_id;
1344#endif
1345
1346 public:
1347 // Accessors
1348 Klass* holder() const { return _holder; }
1349 int offset() const { return _offset; }
1350 JNIid* next() { return _next; }
1351 // Constructor
1352 JNIid(Klass* holder, int offset, JNIid* next);
1353 // Identifier lookup
1354 JNIid* find(int offset);
1355
1356 bool find_local_field(fieldDescriptor* fd) {
1357 return InstanceKlass::cast(holder())->find_local_field_from_offset(offset(), true, fd);
1358 }
1359
1360 static void deallocate(JNIid* id);
1361 // Debugging
1362#ifdef ASSERT
1363 bool is_static_field_id() const { return _is_static_field_id; }
1364 void set_is_static_field_id() { _is_static_field_id = true; }
1365#endif
1366 void verify(Klass* holder);
1367};
1368
1369// An iterator that's used to access the inner classes indices in the
1370// InstanceKlass::_inner_classes array.
1371class InnerClassesIterator : public StackObj {
1372 private:
1373 Array<jushort>* _inner_classes;
1374 int _length;
1375 int _idx;
1376 public:
1377
1378 InnerClassesIterator(const InstanceKlass* k) {
1379 _inner_classes = k->inner_classes();
1380 if (k->inner_classes() != NULL) {
1381 _length = _inner_classes->length();
1382 // The inner class array's length should be the multiple of
1383 // inner_class_next_offset if it only contains the InnerClasses
1384 // attribute data, or it should be
1385 // n*inner_class_next_offset+enclosing_method_attribute_size
1386 // if it also contains the EnclosingMethod data.
1387 assert((_length % InstanceKlass::inner_class_next_offset == 0 ||
1388 _length % InstanceKlass::inner_class_next_offset == InstanceKlass::enclosing_method_attribute_size),
1389 "just checking");
1390 // Remove the enclosing_method portion if exists.
1391 if (_length % InstanceKlass::inner_class_next_offset == InstanceKlass::enclosing_method_attribute_size) {
1392 _length -= InstanceKlass::enclosing_method_attribute_size;
1393 }
1394 } else {
1395 _length = 0;
1396 }
1397 _idx = 0;
1398 }
1399
1400 int length() const {
1401 return _length;
1402 }
1403
1404 void next() {
1405 _idx += InstanceKlass::inner_class_next_offset;
1406 }
1407
1408 bool done() const {
1409 return (_idx >= _length);
1410 }
1411
1412 u2 inner_class_info_index() const {
1413 return _inner_classes->at(
1414 _idx + InstanceKlass::inner_class_inner_class_info_offset);
1415 }
1416
1417 void set_inner_class_info_index(u2 index) {
1418 _inner_classes->at_put(
1419 _idx + InstanceKlass::inner_class_inner_class_info_offset, index);
1420 }
1421
1422 u2 outer_class_info_index() const {
1423 return _inner_classes->at(
1424 _idx + InstanceKlass::inner_class_outer_class_info_offset);
1425 }
1426
1427 void set_outer_class_info_index(u2 index) {
1428 _inner_classes->at_put(
1429 _idx + InstanceKlass::inner_class_outer_class_info_offset, index);
1430 }
1431
1432 u2 inner_name_index() const {
1433 return _inner_classes->at(
1434 _idx + InstanceKlass::inner_class_inner_name_offset);
1435 }
1436
1437 void set_inner_name_index(u2 index) {
1438 _inner_classes->at_put(
1439 _idx + InstanceKlass::inner_class_inner_name_offset, index);
1440 }
1441
1442 u2 inner_access_flags() const {
1443 return _inner_classes->at(
1444 _idx + InstanceKlass::inner_class_access_flags_offset);
1445 }
1446};
1447
1448#endif // SHARE_OOPS_INSTANCEKLASS_HPP
1449