--- a/hotspot/src/share/vm/memory/specialized_oop_closures.hpp Mon Mar 16 18:13:35 2015 +0100
+++ b/hotspot/src/share/vm/memory/specialized_oop_closures.hpp Tue Mar 17 13:23:49 2015 +0100
@@ -60,10 +60,10 @@
// This macro applies an argument macro to all OopClosures for which we
// want specialized bodies of "oop_oop_iterate". The arguments to "f" are:
// "f(closureType, non_virtual)"
-// where "closureType" is the name of the particular subclass of OopClosure,
+// where "closureType" is the name of the particular subclass of ExtendedOopClosure,
// and "non_virtual" will be the string "_nv" if the closure type should
// have its "do_oop" method invoked non-virtually, or else the
-// string "_v". ("OopClosure" itself will be the only class in the latter
+// string "_v". ("ExtendedOopClosure" itself will be the only class in the latter
// category.)
// This is split into several because of a Visual C++ 6.0 compiler bug
@@ -174,93 +174,9 @@
// We separate these out, because sometime the general one has
// a different definition from the specialized ones, and sometimes it
// doesn't.
-// NOTE: One of the valid criticisms of this
-// specialize-oop_oop_iterate-for-specific-closures idiom is that it is
-// easy to have a silent performance bug: if you fail to de-virtualize,
-// things still work, just slower. The "SpecializationStats" mode is
-// intended to at least make such a failure easy to detect.
-// *Not* using the ALL_SINCE_SAVE_MARKS_CLOSURES(f) macro defined
-// below means that *only* closures for which oop_oop_iterate specializations
-// exist above may be applied to "oops_since_save_marks". That is,
-// this form of the performance bug is caught statically. When you add
-// a definition for the general type, this property goes away.
-// Make sure you test with SpecializationStats to find such bugs
-// when introducing a new closure where you don't want virtual dispatch.
#define ALL_SINCE_SAVE_MARKS_CLOSURES(f) \
f(OopsInGenClosure,_v) \
SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
-// For keeping stats on effectiveness.
-#define ENABLE_SPECIALIZATION_STATS 0
-
-
-class SpecializationStats {
-public:
- enum Kind {
- ik, // InstanceKlass
- irk, // InstanceRefKlass
- oa, // ObjArrayKlass
- NUM_Kinds
- };
-
-#if ENABLE_SPECIALIZATION_STATS
-private:
- static bool _init;
- static bool _wrapped;
- static jint _numCallsAll;
-
- static jint _numCallsTotal[NUM_Kinds];
- static jint _numCalls_nv[NUM_Kinds];
-
- static jint _numDoOopCallsTotal[NUM_Kinds];
- static jint _numDoOopCalls_nv[NUM_Kinds];
-public:
-#endif
- static void clear() PRODUCT_RETURN;
-
- static inline void record_call() PRODUCT_RETURN;
- static inline void record_iterate_call_v(Kind k) PRODUCT_RETURN;
- static inline void record_iterate_call_nv(Kind k) PRODUCT_RETURN;
- static inline void record_do_oop_call_v(Kind k) PRODUCT_RETURN;
- static inline void record_do_oop_call_nv(Kind k) PRODUCT_RETURN;
-
- static void print() PRODUCT_RETURN;
-};
-
-#ifndef PRODUCT
-#if ENABLE_SPECIALIZATION_STATS
-
-inline void SpecializationStats::record_call() {
- Atomic::inc(&_numCallsAll);
-}
-inline void SpecializationStats::record_iterate_call_v(Kind k) {
- Atomic::inc(&_numCallsTotal[k]);
-}
-inline void SpecializationStats::record_iterate_call_nv(Kind k) {
- Atomic::inc(&_numCallsTotal[k]);
- Atomic::inc(&_numCalls_nv[k]);
-}
-
-inline void SpecializationStats::record_do_oop_call_v(Kind k) {
- Atomic::inc(&_numDoOopCallsTotal[k]);
-}
-inline void SpecializationStats::record_do_oop_call_nv(Kind k) {
- Atomic::inc(&_numDoOopCallsTotal[k]);
- Atomic::inc(&_numDoOopCalls_nv[k]);
-}
-
-#else // !ENABLE_SPECIALIZATION_STATS
-
-inline void SpecializationStats::record_call() {}
-inline void SpecializationStats::record_iterate_call_v(Kind k) {}
-inline void SpecializationStats::record_iterate_call_nv(Kind k) {}
-inline void SpecializationStats::record_do_oop_call_v(Kind k) {}
-inline void SpecializationStats::record_do_oop_call_nv(Kind k) {}
-inline void SpecializationStats::clear() {}
-inline void SpecializationStats::print() {}
-
-#endif // ENABLE_SPECIALIZATION_STATS
-#endif // !PRODUCT
-
#endif // SHARE_VM_MEMORY_SPECIALIZED_OOP_CLOSURES_HPP