< prev index next >

src/hotspot/share/oops/klass.hpp

Print this page

        

*** 24,34 **** #ifndef SHARE_VM_OOPS_KLASS_HPP #define SHARE_VM_OOPS_KLASS_HPP #include "classfile/classLoaderData.hpp" - #include "gc/shared/specialized_oop_closures.hpp" #include "memory/iterator.hpp" #include "memory/memRegion.hpp" #include "oops/metadata.hpp" #include "oops/oop.hpp" #include "oops/oopHandle.hpp" --- 24,33 ----
*** 101,110 **** --- 100,112 ---- // // Final note: This comes first, immediately after C++ vtable, // because it is frequently queried. jint _layout_helper; + // Klass identifier used to implement devirtualized oop closure dispatching. + const int _id; + // The fields _super_check_offset, _secondary_super_cache, _secondary_supers // and _primary_supers all help make fast subtype checks. See big discussion // in doc/server_compiler/checktype.txt // // Where to look to observe a supertype (it is &_secondary_super_cache for
*** 171,185 **** CDS_JAVA_HEAP_ONLY(narrowOop _archived_mirror;) protected: // Constructor ! Klass(); void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw(); public: enum DefaultsLookupMode { find_defaults, skip_defaults }; enum OverpassLookupMode { find_overpass, skip_overpass }; enum StaticLookupMode { find_static, skip_static }; enum PrivateLookupMode { find_private, skip_private }; --- 173,190 ---- CDS_JAVA_HEAP_ONLY(narrowOop _archived_mirror;) protected: // Constructor ! Klass(int id); ! Klass() : _id(-1) { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); } void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw(); public: + int id() { return _id; } + enum DefaultsLookupMode { find_defaults, skip_defaults }; enum OverpassLookupMode { find_overpass, skip_overpass }; enum StaticLookupMode { find_static, skip_static }; enum PrivateLookupMode { find_private, skip_private };
*** 651,678 **** // Parallel Compact virtual void oop_pc_follow_contents(oop obj, ParCompactionManager* cm) = 0; virtual void oop_pc_update_pointers(oop obj, ParCompactionManager* cm) = 0; #endif - // Iterators specialized to particular subtypes - // of ExtendedOopClosure, to avoid closure virtual calls. - #define Klass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ - virtual void oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) = 0; \ - /* Iterates "closure" over all the oops in "obj" (of type "this") within "mr". */ \ - virtual void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) = 0; - - ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL) - ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL) - - #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS - #define Klass_OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ - virtual void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) = 0; - - ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) - ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) - #endif - 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(); --- 656,665 ----
*** 716,761 **** static Klass* decode_klass_not_null(narrowKlass v); static Klass* decode_klass(narrowKlass v); }; ! // Helper to convert the oop iterate macro suffixes into bool values that can be used by template functions. ! #define nvs_nv_to_bool true ! #define nvs_v_to_bool false ! #define nvs_to_bool(nv_suffix) nvs##nv_suffix##_to_bool ! ! // Oop iteration macros for declarations. ! // Used to generate declarations in the *Klass header files. ! ! #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ ! void oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure); \ ! void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr); ! ! #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS ! #define OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ ! void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure); ! #endif ! ! ! // Oop iteration macros for definitions. ! // Used to generate definitions in the *Klass.inline.hpp files. ! ! #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix) \ ! void KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ ! oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \ ! } ! ! #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS ! #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) \ ! void KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ ! oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \ ! } ! #else ! #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) ! #endif ! ! #define OOP_OOP_ITERATE_DEFN_BOUNDED(KlassType, OopClosureType, nv_suffix) \ ! void KlassType::oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) { \ ! oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr); \ ! } #endif // SHARE_VM_OOPS_KLASS_HPP --- 703,717 ---- static Klass* decode_klass_not_null(narrowKlass v); static Klass* decode_klass(narrowKlass v); }; ! enum KlassID { ! InstanceKlassID, ! InstanceRefKlassID, ! InstanceMirrorKlassID, ! InstanceClassLoaderKlassID, ! TypeArrayKlassID, ! ObjArrayKlassID ! }; #endif // SHARE_VM_OOPS_KLASS_HPP
< prev index next >