src/share/vm/oops/klass.hpp
Print this page
rev 6796 : [mq]: templateOopIterate
rev 6797 : [mq]: vaTests
rev 6798 : [mq]: oneSwitch
rev 6799 : [mq]: latestChanges
rev 6800 : [mq]: replaceTemplateDispatchWithMacroDispatch
*** 63,76 ****
class ParCompactionManager;
class KlassSizeStats;
class Klass : public Metadata {
friend class VMStructs;
protected:
// note: put frequently-used fields together at start of klass structure
// for better cache behavior (may not make much of a difference but sure won't hurt)
- enum { _primary_super_limit = 8 };
// The "layout helper" is a combined descriptor of object layout.
// For klasses which are neither instance nor array, the value is zero.
//
// For instances, layout helper is a positive number, the instance size.
--- 63,87 ----
class ParCompactionManager;
class KlassSizeStats;
class Klass : public Metadata {
friend class VMStructs;
+ public:
+ enum DispatchTag {
+ _instance,
+ _instance_ref,
+ _instance_mirror,
+ _instance_class_loader,
+ _type_array,
+ _obj_array
+ };
+
protected:
+ enum { _primary_super_limit = 8 };
+
// note: put frequently-used fields together at start of klass structure
// for better cache behavior (may not make much of a difference but sure won't hurt)
// The "layout helper" is a combined descriptor of object layout.
// For klasses which are neither instance nor array, the value is zero.
//
// For instances, layout helper is a positive number, the instance size.
*** 145,164 ****
// Remembered sets support for the oops in the klasses.
jbyte _modified_oops; // Card Table Equivalent (YC/CMS support)
jbyte _accumulated_modified_oops; // Mod Union Equivalent (CMS support)
// Constructor
! Klass();
void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw();
public:
enum MethodLookupMode { normal, skip_overpass, skip_defaults };
bool is_klass() const volatile { return true; }
// super
Klass* super() const { return _super; }
void set_super(Klass* k) { _super = k; }
// initializes _super link, _primary_supers & _secondary_supers arrays
--- 156,180 ----
// Remembered sets support for the oops in the klasses.
jbyte _modified_oops; // Card Table Equivalent (YC/CMS support)
jbyte _accumulated_modified_oops; // Mod Union Equivalent (CMS support)
+ const DispatchTag _dispatch_tag;
+
// Constructor
! Klass(DispatchTag dispatch_tag, bool dummy /*ignored*/) : _dispatch_tag(_instance) {} // SSS: For Dummy objects
! Klass(DispatchTag dispatch_tag);
void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw();
public:
enum MethodLookupMode { normal, skip_overpass, skip_defaults };
bool is_klass() const volatile { return true; }
+ DispatchTag dispatch_tag() const { return _dispatch_tag; }
+
// super
Klass* super() const { return _super; }
void set_super(Klass* k) { _super = k; }
// initializes _super link, _primary_supers & _secondary_supers arrays
*** 556,621 ****
static void clean_weak_klass_links(BoolObjectClosure* is_alive, bool clean_alive_klasses = true);
static void clean_subklass_tree(BoolObjectClosure* is_alive) {
clean_weak_klass_links(is_alive, false /* clean_alive_klasses */);
}
- // iterators
- virtual int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) = 0;
- virtual int oop_oop_iterate_v(oop obj, ExtendedOopClosure* blk) {
- return oop_oop_iterate(obj, blk);
- }
-
- #if INCLUDE_ALL_GCS
- // In case we don't have a specialized backward scanner use forward
- // iteration.
- virtual int oop_oop_iterate_backwards_v(oop obj, ExtendedOopClosure* blk) {
- return oop_oop_iterate_v(obj, blk);
- }
- #endif // INCLUDE_ALL_GCS
-
- // Iterates "blk" over all the oops in "obj" (of type "this") within "mr".
- // (I don't see why the _m should be required, but without it the Solaris
- // C++ gives warning messages about overridings of the "oop_oop_iterate"
- // defined above "hiding" this virtual function. (DLD, 6/20/00)) */
- virtual int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) = 0;
- virtual int oop_oop_iterate_v_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) {
- return oop_oop_iterate_m(obj, blk, mr);
- }
-
- // Versions of the above iterators specialized to particular subtypes
- // of OopClosure, to avoid closure virtual calls.
- #define Klass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \
- virtual int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk) { \
- /* Default implementation reverts to general version. */ \
- return oop_oop_iterate(obj, blk); \
- } \
- \
- /* Iterates "blk" over all the oops in "obj" (of type "this") within "mr". \
- (I don't see why the _m should be required, but without it the Solaris \
- C++ gives warning messages about overridings of the "oop_oop_iterate" \
- defined above "hiding" this virtual function. (DLD, 6/20/00)) */ \
- virtual int oop_oop_iterate##nv_suffix##_m(oop obj, \
- OopClosureType* blk, \
- MemRegion mr) { \
- return oop_oop_iterate_m(obj, blk, mr); \
- }
-
- SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL)
- SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL)
-
- #if INCLUDE_ALL_GCS
- #define Klass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
- virtual int oop_oop_iterate_backwards##nv_suffix(oop obj, \
- OopClosureType* blk) { \
- /* Default implementation reverts to general version. */ \
- return oop_oop_iterate_backwards_v(obj, blk); \
- }
-
- SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_BACKWARDS_DECL)
- SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_BACKWARDS_DECL)
- #endif // INCLUDE_ALL_GCS
-
virtual void array_klasses_do(void f(Klass* k)) {}
// Return self, except for abstract classes with exactly 1
// implementor. Then return the 1 concrete implementation.
Klass *up_cast_abstract();
--- 572,581 ----