< prev index next >

src/hotspot/share/prims/jvmtiExport.hpp

Print this page
rev 49521 : [mq]: heap8
rev 49522 : [mq]: event_rebased

*** 121,130 **** --- 121,131 ---- // we are holding objects on the heap - need to talk to GC - e.g. // breakpoint info JVMTI_SUPPORT_FLAG(should_clean_up_heap_objects) JVMTI_SUPPORT_FLAG(should_post_vm_object_alloc) + JVMTI_SUPPORT_FLAG(should_post_sampled_object_alloc) // If flag cannot be implemented, give an error if on=true static void report_unsupported(bool on); // these should only be called by the friend class
*** 374,383 **** --- 375,395 ---- inline static void vm_object_alloc_event_collector(oop object) { if (should_post_vm_object_alloc()) { record_vm_internal_object_allocation(object); } } + + static void record_sampled_internal_object_allocation(oop object) NOT_JVMTI_RETURN; + // Post objects collected by sampled_object_alloc_event_collector. + static void post_sampled_object_alloc(JavaThread *thread, oop object) NOT_JVMTI_RETURN; + // Collects vm internal objects for later event posting. + inline static void sampled_object_alloc_event_collector(oop object) { + if (should_post_sampled_object_alloc()) { + record_sampled_internal_object_allocation(object); + } + } + inline static void post_array_size_exhausted() { if (should_post_resource_exhausted()) { post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, "Requested array size exceeds VM limit"); }
*** 435,448 **** --- 447,463 ---- class JvmtiEventCollector : public StackObj { private: JvmtiEventCollector* _prev; // Save previous one to support nested event collector. public: + JvmtiEventCollector() : _prev(NULL) {} + void setup_jvmti_thread_state(); // Set this collector in current thread. void unset_jvmti_thread_state(); // Reset previous collector in current thread. virtual bool is_dynamic_code_event() { return false; } virtual bool is_vm_object_alloc_event(){ return false; } + virtual bool is_sampled_object_alloc_event(){ return false; } JvmtiEventCollector *get_prev() { return _prev; } }; // A JvmtiDynamicCodeEventCollector is a helper class for the JvmtiExport // interface. It collects "dynamic code generated" events that are posted
*** 473,497 **** ~JvmtiDynamicCodeEventCollector() NOT_JVMTI_RETURN; bool is_dynamic_code_event() { return true; } }; ! // Used to record vm internally allocated object oops and post ! // vm object alloc event for objects visible to java world. ! // Constructor enables JvmtiThreadState flag and all vm allocated ! // objects are recorded in a growable array. When destructor is ! // called the vm object alloc event is posted for each objects ! // visible to java world. ! // See jvm.cpp file for its usage. // ! class JvmtiVMObjectAllocEventCollector : public JvmtiEventCollector { ! private: GrowableArray<oop>* _allocated; // field to record vm internally allocated object oop. bool _enable; // This flag is enabled in constructor and disabled // in destructor before posting event. To avoid // collection of objects allocated while running java code inside ! // agent post_vm_object_alloc() event handler. //GC support void oops_do(OopClosure* f); friend class JvmtiExport; --- 488,508 ---- ~JvmtiDynamicCodeEventCollector() NOT_JVMTI_RETURN; bool is_dynamic_code_event() { return true; } }; ! // Used as a base class for object allocation collection and then posting ! // the allocations to any event notification callbacks. // ! class JvmtiObjectAllocEventCollector : public JvmtiEventCollector { ! protected: GrowableArray<oop>* _allocated; // field to record vm internally allocated object oop. bool _enable; // This flag is enabled in constructor and disabled // in destructor before posting event. To avoid // collection of objects allocated while running java code inside ! // agent post_X_object_alloc() event handler. ! void (*_post_callback)(JavaThread*, oop); // what callback to use when destroying the collector. //GC support void oops_do(OopClosure* f); friend class JvmtiExport;
*** 500,518 **** //GC support static void oops_do_for_all_threads(OopClosure* f); public: ! JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN; ! ~JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN; ! bool is_vm_object_alloc_event() { return true; } bool is_enabled() { return _enable; } void set_enabled(bool on) { _enable = on; } }; // Marker class to disable the posting of VMObjectAlloc events // within its scope. // // Usage :- --- 511,556 ---- //GC support static void oops_do_for_all_threads(OopClosure* f); public: ! JvmtiObjectAllocEventCollector() NOT_JVMTI_RETURN; ! ! void generate_call_for_allocated(); bool is_enabled() { return _enable; } void set_enabled(bool on) { _enable = on; } }; + // Used to record vm internally allocated object oops and post + // vm object alloc event for objects visible to java world. + // Constructor enables JvmtiThreadState flag and all vm allocated + // objects are recorded in a growable array. When destructor is + // called the vm object alloc event is posted for each object + // visible to java world. + // See jvm.cpp file for its usage. + // + class JvmtiVMObjectAllocEventCollector : public JvmtiObjectAllocEventCollector { + public: + JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN; + ~JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN; + virtual bool is_vm_object_alloc_event() { return true; } + }; + // Used to record sampled allocated object oops and post + // sampled object alloc event. + // Constructor enables JvmtiThreadState flag and all sampled allocated + // objects are recorded in a growable array. When destructor is + // called the sampled object alloc event is posted for each sampled object. + // See jvm.cpp file for its usage. + // + class JvmtiSampledObjectAllocEventCollector : public JvmtiObjectAllocEventCollector { + public: + JvmtiSampledObjectAllocEventCollector() NOT_JVMTI_RETURN; + ~JvmtiSampledObjectAllocEventCollector() NOT_JVMTI_RETURN; + bool is_sampled_object_alloc_event() { return true; } + }; // Marker class to disable the posting of VMObjectAlloc events // within its scope. // // Usage :-
< prev index next >