hotspot Udiff src/share/vm/oops/instanceKlass.hpp (original) (raw)
rev 9016 : [mq]: ikflags
@@ -115,10 +115,11 @@ // Constructor InstanceKlass(int vtable_len, int itable_len, int static_field_size, int nonstatic_oop_map_size,
public: static InstanceKlass* allocate_instance_klass(unsigned kind, ReferenceType rt, AccessFlags access_flags, bool is_anonymous);
@@ -197,20 +198,34 @@ // _is_marked_dependent can be set concurrently, thus cannot be part of the // _misc_flags. bool _is_marked_dependent; // used for marking during flushing and deoptimization bool _has_unloaded_dependent;
- // The low two bits of _misc_flags contains the kind field.
- // This can be used to quickly discriminate among the four kinds of
- // InstanceKlass.
- static const unsigned _misc_kind_field_size = 2;
- static const unsigned _misc_kind_field_pos = 0;
- static const unsigned _misc_kind_field_mask = 3;
- static const unsigned _misc_kind_instance = 0; // concrete InstanceKlass
- static const unsigned _misc_kind_reference = 1; // InstanceRefKlass
- static const unsigned _misc_kind_class_loader = 2; // InstanceClassLoaderKlass
- static const unsigned _misc_kind_mirror = 3; // InstanceMirrorKlass
- // Start after _misc_kind field. enum {
- _misc_rewritten = 1 << 0, // methods rewritten.
- _misc_has_nonstatic_fields = 1 << 1, // for sizing with UseCompressedOops
- _misc_should_verify_class = 1 << 2, // allow caching of preverification
- _misc_is_anonymous = 1 << 3, // has embedded _host_klass field
- _misc_is_contended = 1 << 4, // marked with contended annotation
- _misc_has_default_methods = 1 << 5, // class/superclass/implemented interfaces has default methods
- _misc_declares_default_methods = 1 << 6, // directly declares default methods (any access)
- _misc_has_been_redefined = 1 << 7, // class has been redefined
- _misc_is_scratch_class = 1 << 8 // class is the redefined scratch class
- _misc_rewritten = 1 << 2, // methods rewritten.
- _misc_has_nonstatic_fields = 1 << 3, // for sizing with UseCompressedOops
- _misc_should_verify_class = 1 << 4, // allow caching of preverification
- _misc_is_anonymous = 1 << 5, // has embedded _host_klass field
- _misc_is_contended = 1 << 6, // marked with contended annotation
- _misc_has_default_methods = 1 << 7, // class/superclass/implemented interfaces has default methods
- _misc_declares_default_methods = 1 << 8, // directly declares default methods (any access)
- _misc_has_been_redefined = 1 << 9, // class has been redefined
- _misc_is_scratch_class = 1 << 10 // class is the redefined scratch class
}; u2 _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 recusive initialization)
@@ -665,10 +680,66 @@
void set_is_scratch_class() { _misc_flags |= _misc_is_scratch_class; }
+private: +
static void check_kind(unsigned kind) {
assert(kind <= _misc_kind_field_mask, "Invalid InstanceKlass kind");
}
void set_kind(unsigned kind) {
check_kind(kind);
unsigned fmask = ~(_misc_kind_field_mask << _misc_kind_field_pos);
unsigned flags = _misc_flags & fmask;
_misc_flags = (flags | (kind << _misc_kind_field_pos));
}
static bool kind_is_match(unsigned kind, unsigned desired) {
check_kind(kind);
return kind == desired;
}
+public:
unsigned kind() const {
return (_misc_flags >> _misc_kind_field_pos) & _misc_kind_field_mask;
}
static bool kind_is_instance(unsigned kind) {
return kind_is_match(kind, _misc_kind_instance);
}
static bool kind_is_reference(unsigned kind) {
return kind_is_match(kind, _misc_kind_reference);
}
static bool kind_is_mirror(unsigned kind) {
return kind_is_match(kind, _misc_kind_mirror);
}
static bool kind_is_class_loader(unsigned kind) {
return kind_is_match(kind, _misc_kind_class_loader);
}
bool kind_is_instance() const {
return kind_is_instance(kind());
}
bool kind_is_reference() const {
return kind_is_reference(kind());
}
bool kind_is_mirror() const {
return kind_is_mirror(kind());
}
bool kind_is_class_loader() const {
return kind_is_class_loader(kind());
}
void init_previous_versions() { _previous_versions = NULL; }
private: