< prev index next >

src/share/vm/memory/iterator.hpp

Print this page

        

*** 59,69 **** // If the do_metadata functions return "true", // we invoke the following when running oop_iterate(): // // 1) do_klass on the header klass pointer. // 2) do_klass on the klass pointer in the mirrors. ! // 3) do_class_loader_data on the class loader data in class loaders. // // The virtual (without suffix) and the non-virtual (with _nv suffix) need // to be updated together, or else the devirtualization will break. // // Providing default implementations of the _nv functions unfortunately --- 59,69 ---- // If the do_metadata functions return "true", // we invoke the following when running oop_iterate(): // // 1) do_klass on the header klass pointer. // 2) do_klass on the klass pointer in the mirrors. ! // 3) do_cld on the class loader data in class loaders. // // The virtual (without suffix) and the non-virtual (with _nv suffix) need // to be updated together, or else the devirtualization will break. // // Providing default implementations of the _nv functions unfortunately
*** 75,85 **** bool do_metadata_nv() { return false; } virtual void do_klass(Klass* k) { do_klass_nv(k); } void do_klass_nv(Klass* k) { ShouldNotReachHere(); } ! virtual void do_class_loader_data(ClassLoaderData* cld) { ShouldNotReachHere(); } // True iff this closure may be safely applied more than once to an oop // location without an intervening "major reset" (like the end of a GC). virtual bool idempotent() { return false; } virtual bool apply_to_weak_ref_discovered_field() { return false; } --- 75,86 ---- bool do_metadata_nv() { return false; } virtual void do_klass(Klass* k) { do_klass_nv(k); } void do_klass_nv(Klass* k) { ShouldNotReachHere(); } ! virtual void do_cld(ClassLoaderData* cld) { do_cld_nv(cld); } ! void do_cld_nv(ClassLoaderData* cld) { ShouldNotReachHere(); } // True iff this closure may be safely applied more than once to an oop // location without an intervening "major reset" (like the end of a GC). virtual bool idempotent() { return false; } virtual bool apply_to_weak_ref_discovered_field() { return false; }
*** 184,194 **** inline bool do_metadata_nv() { return true; } virtual void do_klass(Klass* k); void do_klass_nv(Klass* k); ! virtual void do_class_loader_data(ClassLoaderData* cld); }; // ObjectClosure is used for iterating through an object space class ObjectClosure : public Closure { --- 185,196 ---- inline bool do_metadata_nv() { return true; } virtual void do_klass(Klass* k); void do_klass_nv(Klass* k); ! virtual void do_cld(ClassLoaderData* cld) { do_cld_nv(cld); } ! void do_cld_nv(ClassLoaderData* cld); }; // ObjectClosure is used for iterating through an object space class ObjectClosure : public Closure {
*** 368,384 **** --- 370,388 ---- // Dispatches to the non-virtual functions. template <> class Devirtualizer<true> { public: template <class OopClosureType, typename T> static void do_oop(OopClosureType* closure, T* p); template <class OopClosureType> static void do_klass(OopClosureType* closure, Klass* k); + template <class OopClosureType> static void do_cld(OopClosureType* closure, ClassLoaderData* cld); template <class OopClosureType> static bool do_metadata(OopClosureType* closure); }; // Dispatches to the virtual functions. template <> class Devirtualizer<false> { public: template <class OopClosureType, typename T> static void do_oop(OopClosureType* closure, T* p); template <class OopClosureType> static void do_klass(OopClosureType* closure, Klass* k); + template <class OopClosureType> static void do_cld(OopClosureType* closure, ClassLoaderData* cld); template <class OopClosureType> static bool do_metadata(OopClosureType* closure); }; #endif // SHARE_VM_MEMORY_ITERATOR_HPP
< prev index next >