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 ----