src/share/vm/memory/specialized_oop_closures.hpp

changeset 777
37f87013dfd8
parent 435
a61af66fc99e
child 1907
c18cbe5936b8
     1.1 --- a/src/share/vm/memory/specialized_oop_closures.hpp	Wed Jun 04 13:51:09 2008 -0700
     1.2 +++ b/src/share/vm/memory/specialized_oop_closures.hpp	Thu Jun 05 15:57:56 2008 -0700
     1.3 @@ -59,6 +59,12 @@
     1.4  // This is split into several because of a Visual C++ 6.0 compiler bug
     1.5  // where very long macros cause the compiler to crash
     1.6  
     1.7 +// Some other heap might define further specialized closures.
     1.8 +#ifndef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES
     1.9 +#define FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES(f) \
    1.10 +        /* None */
    1.11 +#endif
    1.12 +
    1.13  #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f)       \
    1.14    f(ScanClosure,_nv)                                    \
    1.15    f(FastScanClosure,_nv)                                \
    1.16 @@ -77,7 +83,7 @@
    1.17    SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f)
    1.18  
    1.19  #ifndef SERIALGC
    1.20 -#define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_3(f)       \
    1.21 +#define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)       \
    1.22    f(MarkRefsIntoAndScanClosure,_nv)                     \
    1.23    f(Par_MarkRefsIntoAndScanClosure,_nv)                 \
    1.24    f(PushAndMarkClosure,_nv)                             \
    1.25 @@ -85,11 +91,13 @@
    1.26    f(PushOrMarkClosure,_nv)                              \
    1.27    f(Par_PushOrMarkClosure,_nv)                          \
    1.28    f(CMSKeepAliveClosure,_nv)                            \
    1.29 -  f(CMSInnerParMarkAndPushClosure,_nv)
    1.30 +  f(CMSInnerParMarkAndPushClosure,_nv)                  \
    1.31 +  FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES(f)
    1.32  #else  // SERIALGC
    1.33 -#define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_3(f)
    1.34 +#define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)
    1.35  #endif // SERIALGC
    1.36  
    1.37 +
    1.38  // We separate these out, because sometime the general one has
    1.39  // a different definition from the specialized ones, and sometimes it
    1.40  // doesn't.
    1.41 @@ -98,8 +106,8 @@
    1.42    f(OopClosure,_v)                                      \
    1.43    SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f)
    1.44  
    1.45 -#define ALL_OOP_OOP_ITERATE_CLOSURES_3(f)               \
    1.46 -  SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_3(f)
    1.47 +#define ALL_OOP_OOP_ITERATE_CLOSURES_2(f)               \
    1.48 +  SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(f)
    1.49  
    1.50  #ifndef SERIALGC
    1.51  // This macro applies an argument macro to all OopClosures for which we
    1.52 @@ -125,6 +133,13 @@
    1.53  // The "root_class" is the most general class to define; this may be
    1.54  // "OopClosure" in some applications and "OopsInGenClosure" in others.
    1.55  
    1.56 +
    1.57 +// Some other heap might define further specialized closures.
    1.58 +#ifndef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES
    1.59 +#define FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f) \
    1.60 +        /* None */
    1.61 +#endif
    1.62 +
    1.63  #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_S(f) \
    1.64    f(ScanClosure,_nv)                                     \
    1.65    f(FastScanClosure,_nv)
    1.66 @@ -132,7 +147,8 @@
    1.67  #ifndef SERIALGC
    1.68  #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_P(f) \
    1.69    f(ParScanWithBarrierClosure,_nv)                       \
    1.70 -  f(ParScanWithoutBarrierClosure,_nv)
    1.71 +  f(ParScanWithoutBarrierClosure,_nv)                    \
    1.72 +  FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
    1.73  #else  // SERIALGC
    1.74  #define SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES_YOUNG_P(f)
    1.75  #endif // SERIALGC
    1.76 @@ -179,13 +195,15 @@
    1.77  
    1.78  #if ENABLE_SPECIALIZATION_STATS
    1.79  private:
    1.80 -  static int _numCallsAll;
    1.81 +  static bool _init;
    1.82 +  static bool _wrapped;
    1.83 +  static jint _numCallsAll;
    1.84  
    1.85 -  static int _numCallsTotal[NUM_Kinds];
    1.86 -  static int _numCalls_nv[NUM_Kinds];
    1.87 +  static jint _numCallsTotal[NUM_Kinds];
    1.88 +  static jint _numCalls_nv[NUM_Kinds];
    1.89  
    1.90 -  static int _numDoOopCallsTotal[NUM_Kinds];
    1.91 -  static int _numDoOopCalls_nv[NUM_Kinds];
    1.92 +  static jint _numDoOopCallsTotal[NUM_Kinds];
    1.93 +  static jint _numDoOopCalls_nv[NUM_Kinds];
    1.94  public:
    1.95  #endif
    1.96    static void clear()  PRODUCT_RETURN;
    1.97 @@ -203,22 +221,22 @@
    1.98  #if ENABLE_SPECIALIZATION_STATS
    1.99  
   1.100  inline void SpecializationStats::record_call() {
   1.101 -  _numCallsAll++;;
   1.102 +  Atomic::inc(&_numCallsAll);
   1.103  }
   1.104  inline void SpecializationStats::record_iterate_call_v(Kind k) {
   1.105 -  _numCallsTotal[k]++;
   1.106 +  Atomic::inc(&_numCallsTotal[k]);
   1.107  }
   1.108  inline void SpecializationStats::record_iterate_call_nv(Kind k) {
   1.109 -  _numCallsTotal[k]++;
   1.110 -  _numCalls_nv[k]++;
   1.111 +  Atomic::inc(&_numCallsTotal[k]);
   1.112 +  Atomic::inc(&_numCalls_nv[k]);
   1.113  }
   1.114  
   1.115  inline void SpecializationStats::record_do_oop_call_v(Kind k) {
   1.116 -  _numDoOopCallsTotal[k]++;
   1.117 +  Atomic::inc(&_numDoOopCallsTotal[k]);
   1.118  }
   1.119  inline void SpecializationStats::record_do_oop_call_nv(Kind k) {
   1.120 -  _numDoOopCallsTotal[k]++;
   1.121 -  _numDoOopCalls_nv[k]++;
   1.122 +  Atomic::inc(&_numDoOopCallsTotal[k]);
   1.123 +  Atomic::inc(&_numDoOopCalls_nv[k]);
   1.124  }
   1.125  
   1.126  #else   // !ENABLE_SPECIALIZATION_STATS

mercurial