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