1744 };
1745
1746
1747 // helper to map a jvmtiHeapReferenceKind to an old style jvmtiHeapRootKind
1748 // (not performance critical as only used for roots)
1749 static jvmtiHeapRootKind toJvmtiHeapRootKind(jvmtiHeapReferenceKind kind) {
1750 switch (kind) {
1751 case JVMTI_HEAP_REFERENCE_JNI_GLOBAL: return JVMTI_HEAP_ROOT_JNI_GLOBAL;
1752 case JVMTI_HEAP_REFERENCE_SYSTEM_CLASS: return JVMTI_HEAP_ROOT_SYSTEM_CLASS;
1753 case JVMTI_HEAP_REFERENCE_MONITOR: return JVMTI_HEAP_ROOT_MONITOR;
1754 case JVMTI_HEAP_REFERENCE_STACK_LOCAL: return JVMTI_HEAP_ROOT_STACK_LOCAL;
1755 case JVMTI_HEAP_REFERENCE_JNI_LOCAL: return JVMTI_HEAP_ROOT_JNI_LOCAL;
1756 case JVMTI_HEAP_REFERENCE_THREAD: return JVMTI_HEAP_ROOT_THREAD;
1757 case JVMTI_HEAP_REFERENCE_OTHER: return JVMTI_HEAP_ROOT_OTHER;
1758 default: ShouldNotReachHere(); return JVMTI_HEAP_ROOT_OTHER;
1759 }
1760 }
1761
1762 // Base class for all heap walk contexts. The base class maintains a flag
1763 // to indicate if the context is valid or not.
1764 class HeapWalkContext VALUE_OBJ_CLASS_SPEC {
1765 private:
1766 bool _valid;
1767 public:
1768 HeapWalkContext(bool valid) { _valid = valid; }
1769 void invalidate() { _valid = false; }
1770 bool is_valid() const { return _valid; }
1771 };
1772
1773 // A basic heap walk context for the deprecated heap walking functions.
1774 // The context for a basic heap walk are the callbacks and fields used by
1775 // the referrer caching scheme.
1776 class BasicHeapWalkContext: public HeapWalkContext {
1777 private:
1778 jvmtiHeapRootCallback _heap_root_callback;
1779 jvmtiStackReferenceCallback _stack_ref_callback;
1780 jvmtiObjectReferenceCallback _object_ref_callback;
1781
1782 // used for caching
1783 oop _last_referrer;
1784 jlong _last_referrer_tag;
|
1744 };
1745
1746
1747 // helper to map a jvmtiHeapReferenceKind to an old style jvmtiHeapRootKind
1748 // (not performance critical as only used for roots)
1749 static jvmtiHeapRootKind toJvmtiHeapRootKind(jvmtiHeapReferenceKind kind) {
1750 switch (kind) {
1751 case JVMTI_HEAP_REFERENCE_JNI_GLOBAL: return JVMTI_HEAP_ROOT_JNI_GLOBAL;
1752 case JVMTI_HEAP_REFERENCE_SYSTEM_CLASS: return JVMTI_HEAP_ROOT_SYSTEM_CLASS;
1753 case JVMTI_HEAP_REFERENCE_MONITOR: return JVMTI_HEAP_ROOT_MONITOR;
1754 case JVMTI_HEAP_REFERENCE_STACK_LOCAL: return JVMTI_HEAP_ROOT_STACK_LOCAL;
1755 case JVMTI_HEAP_REFERENCE_JNI_LOCAL: return JVMTI_HEAP_ROOT_JNI_LOCAL;
1756 case JVMTI_HEAP_REFERENCE_THREAD: return JVMTI_HEAP_ROOT_THREAD;
1757 case JVMTI_HEAP_REFERENCE_OTHER: return JVMTI_HEAP_ROOT_OTHER;
1758 default: ShouldNotReachHere(); return JVMTI_HEAP_ROOT_OTHER;
1759 }
1760 }
1761
1762 // Base class for all heap walk contexts. The base class maintains a flag
1763 // to indicate if the context is valid or not.
1764 class HeapWalkContext {
1765 private:
1766 bool _valid;
1767 public:
1768 HeapWalkContext(bool valid) { _valid = valid; }
1769 void invalidate() { _valid = false; }
1770 bool is_valid() const { return _valid; }
1771 };
1772
1773 // A basic heap walk context for the deprecated heap walking functions.
1774 // The context for a basic heap walk are the callbacks and fields used by
1775 // the referrer caching scheme.
1776 class BasicHeapWalkContext: public HeapWalkContext {
1777 private:
1778 jvmtiHeapRootCallback _heap_root_callback;
1779 jvmtiStackReferenceCallback _stack_ref_callback;
1780 jvmtiObjectReferenceCallback _object_ref_callback;
1781
1782 // used for caching
1783 oop _last_referrer;
1784 jlong _last_referrer_tag;
|