src/share/vm/oops/instanceKlass.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/oops/instanceKlass.hpp Fri Sep 9 14:16:13 2011
--- new/src/share/vm/oops/instanceKlass.hpp Fri Sep 9 14:16:13 2011
*** 1011,1016 ****
--- 1011,1048 ----
// Return the interesting information for the next previous version
// of the klass. Returns NULL if there are no more previous versions.
PreviousVersionInfo* next_previous_version();
};
+
+ //
+ // nmethodBucket is used to record dependent nmethods for
+ // deoptimization. nmethod dependencies are actually <klass, method>
+ // pairs but we really only care about the klass part for purposes of
+ // finding nmethods which might need to be deoptimized. Instead of
+ // recording the method, a count of how many times a particular nmethod
+ // was recorded is kept. This ensures that any recording errors are
+ // noticed since an nmethod should be removed as many times are it's
+ // added.
+ //
+ class nmethodBucket: public CHeapObj {
+ friend class VMStructs;
+ private:
+ nmethod* _nmethod;
+ int _count;
+ nmethodBucket* _next;
+
+ public:
+ nmethodBucket(nmethod* nmethod, nmethodBucket* next) {
+ _nmethod = nmethod;
+ _next = next;
+ _count = 1;
+ }
+ int count() { return _count; }
+ int increment() { _count += 1; return _count; }
+ int decrement() { _count -= 1; assert(_count >= 0, "don't underflow"); return _count; }
+ nmethodBucket* next() { return _next; }
+ void set_next(nmethodBucket* b) { _next = b; }
+ nmethod* get_nmethod() { return _nmethod; }
+ };
+
#endif // SHARE_VM_OOPS_INSTANCEKLASS_HPP
src/share/vm/oops/instanceKlass.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File