< prev index next >
src/hotspot/share/oops/instanceKlass.hpp
Print this page
@@ -242,11 +242,11 @@
_misc_has_resolved_methods = 1 << 15 // resolved methods table entries added for this class
};
u2 loader_type_bits() {
return _misc_is_shared_boot_class|_misc_is_shared_platform_class|_misc_is_shared_app_class;
}
- u2 _misc_flags;
+ u4 _misc_flags;
u2 _minor_version; // minor version number of class file
u2 _major_version; // major version number of class file
Thread* _init_thread; // Pointer to current thread doing initialization (to handle recursive initialization)
OopMapCache* volatile _oop_map_cache; // OopMapCache for all methods in the klass (allocated lazily)
JNIid* _jni_ids; // First JNI identifier for static fields in this class
@@ -445,20 +445,25 @@
void set_nest_members(Array<u2>* m) { _nest_members = m; }
// nest-host index
jushort nest_host_index() const { return _nest_host_index; }
void set_nest_host_index(u2 i) { _nest_host_index = i; }
+ // dynamic nest member support
+ void set_nest_host(InstanceKlass* host, TRAPS);
private:
// Called to verify that k is a member of this nest - does not look at k's nest-host
bool has_nest_member(InstanceKlass* k, TRAPS) const;
public:
// Returns nest-host class, resolving and validating it if needed
// Returns NULL if an exception occurs during loading, or validation fails
InstanceKlass* nest_host(Symbol* validationException, TRAPS);
// Check if this klass is a nestmate of k - resolves this nest-host and k's
bool has_nestmate_access_to(InstanceKlass* k, TRAPS);
+ // Returns the runtime nest host. If static nest host is valid, set the nest host;
+ // otherwise this klass is the host of a nest; all errors are ignored
+ InstanceKlass* runtime_nest_host(TRAPS);
enum InnerClassAttributeOffset {
// From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814
inner_class_inner_class_info_offset = 0,
inner_class_outer_class_info_offset = 1,
@@ -763,12 +768,12 @@
_misc_flags &= ~_misc_has_passed_fingerprint_check;
}
}
bool supers_have_passed_fingerprint_checks();
- static bool should_store_fingerprint(bool is_unsafe_anonymous);
- bool should_store_fingerprint() const { return should_store_fingerprint(is_unsafe_anonymous()); }
+ static bool should_store_fingerprint(bool is_hidden_or_anonymous);
+ bool should_store_fingerprint() const { return should_store_fingerprint(is_hidden() || is_unsafe_anonymous()); }
bool has_stored_fingerprint() const;
uint64_t get_stored_fingerprint() const;
void store_fingerprint(uint64_t fingerprint);
bool is_scratch_class() const {
@@ -1036,24 +1041,24 @@
// Sizing (in words)
static int header_size() { return sizeof(InstanceKlass)/wordSize; }
static int size(int vtable_length, int itable_length,
int nonstatic_oop_map_size,
- bool is_interface, bool is_unsafe_anonymous, bool has_stored_fingerprint) {
+ bool is_interface, bool is_hidden_or_anonymous, bool has_stored_fingerprint) {
return align_metadata_size(header_size() +
vtable_length +
itable_length +
nonstatic_oop_map_size +
(is_interface ? (int)sizeof(Klass*)/wordSize : 0) +
- (is_unsafe_anonymous ? (int)sizeof(Klass*)/wordSize : 0) +
+ (is_hidden_or_anonymous ? (int)sizeof(Klass*)/wordSize : 0) +
(has_stored_fingerprint ? (int)sizeof(uint64_t*)/wordSize : 0));
}
int size() const { return size(vtable_length(),
itable_length(),
nonstatic_oop_map_size(),
is_interface(),
- is_unsafe_anonymous(),
+ (is_hidden() || is_unsafe_anonymous()),
has_stored_fingerprint());
}
#if INCLUDE_SERVICES
virtual void collect_statistics(KlassSizeStats *sz) const;
#endif
< prev index next >