41 static jmmOptionalSupport _optional_support; 42 static TimeStamp _stamp; // Timestamp since vm init done time 43 44 // Management klasses 45 static Klass* _sensor_klass; 46 static Klass* _threadInfo_klass; 47 static Klass* _memoryUsage_klass; 48 static Klass* _memoryPoolMXBean_klass; 49 static Klass* _memoryManagerMXBean_klass; 50 static Klass* _garbageCollectorMXBean_klass; 51 static Klass* _managementFactory_klass; 52 static Klass* _garbageCollectorImpl_klass; 53 static Klass* _gcInfo_klass; 54 55 static Klass* load_and_initialize_klass(Symbol* sh, TRAPS); 56 57 public: 58 static void init(); 59 static void initialize(TRAPS); 60 61 static jlong ticks_to_ms(jlong ticks); 62 static jlong timestamp(); 63 64 static void oops_do(OopClosure* f); 65 static void* get_jmm_interface(int version); 66 static void get_optional_support(jmmOptionalSupport* support); 67 68 static void get_loaded_classes(JavaThread* cur_thread, GrowableArray<KlassHandle>* klass_handle_array); 69 70 static void record_vm_startup_time(jlong begin, jlong duration); 71 static void record_vm_init_completed() { 72 // Initialize the timestamp to get the current time 73 _vm_init_done_time->set_value(os::javaTimeMillis()); 74 75 // Update the timestamp to the vm init done time 76 _stamp.update(); 77 } 78 79 static jlong begin_vm_creation_time() { 80 return _begin_vm_creation_time->get_value(); 81 } 82 static jlong vm_init_done_time() { 83 return _vm_init_done_time->get_value(); 84 } 85 86 // methods to return a Klass*. 87 static Klass* java_lang_management_ThreadInfo_klass(TRAPS); 88 static Klass* java_lang_management_MemoryUsage_klass(TRAPS); 89 static Klass* java_lang_management_MemoryPoolMXBean_klass(TRAPS); 90 static Klass* java_lang_management_MemoryManagerMXBean_klass(TRAPS); 91 static Klass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS); 92 static Klass* sun_management_Sensor_klass(TRAPS); 93 static Klass* sun_management_ManagementFactory_klass(TRAPS); 94 static Klass* sun_management_GarbageCollectorImpl_klass(TRAPS); 95 static Klass* com_sun_management_GcInfo_klass(TRAPS); 96 97 static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS); 98 static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, objArrayHandle monitors_array, typeArrayHandle depths_array, objArrayHandle synchronizers_array, TRAPS); 99 }; 100 101 class TraceVmCreationTime : public StackObj { 102 private: 103 TimeStamp _timer; 104 jlong _begin_time; 105 106 public: 107 TraceVmCreationTime() {} 108 ~TraceVmCreationTime() {} 109 110 void start() 111 { _timer.update_to(0); _begin_time = os::javaTimeMillis(); } 112 113 /** 114 * Only call this if initialization completes successfully; it will 115 * crash if PerfMemory_exit() has already been called (usually by | 41 static jmmOptionalSupport _optional_support; 42 static TimeStamp _stamp; // Timestamp since vm init done time 43 44 // Management klasses 45 static Klass* _sensor_klass; 46 static Klass* _threadInfo_klass; 47 static Klass* _memoryUsage_klass; 48 static Klass* _memoryPoolMXBean_klass; 49 static Klass* _memoryManagerMXBean_klass; 50 static Klass* _garbageCollectorMXBean_klass; 51 static Klass* _managementFactory_klass; 52 static Klass* _garbageCollectorImpl_klass; 53 static Klass* _gcInfo_klass; 54 55 static Klass* load_and_initialize_klass(Symbol* sh, TRAPS); 56 57 public: 58 static void init(); 59 static void initialize(TRAPS); 60 61 static jlong ticks_to_ms(jlong ticks) NOT_MANAGEMENT_RETURN_(0L); 62 static jlong timestamp() NOT_MANAGEMENT_RETURN_(0L); 63 64 static void oops_do(OopClosure* f) NOT_MANAGEMENT_RETURN; 65 static void* get_jmm_interface(int version); 66 static void get_optional_support(jmmOptionalSupport* support); 67 68 static void get_loaded_classes(JavaThread* cur_thread, GrowableArray<KlassHandle>* klass_handle_array); 69 70 static void record_vm_startup_time(jlong begin, jlong duration) 71 NOT_MANAGEMENT_RETURN; 72 static void record_vm_init_completed() { 73 // Initialize the timestamp to get the current time 74 _vm_init_done_time->set_value(os::javaTimeMillis()); 75 76 // Update the timestamp to the vm init done time 77 _stamp.update(); 78 } 79 80 static jlong begin_vm_creation_time() { 81 return _begin_vm_creation_time->get_value(); 82 } 83 static jlong vm_init_done_time() { 84 return _vm_init_done_time->get_value(); 85 } 86 87 // methods to return a Klass*. 88 static Klass* java_lang_management_ThreadInfo_klass(TRAPS); 89 static Klass* java_lang_management_MemoryUsage_klass(TRAPS) 90 NOT_MANAGEMENT_RETURN_(NULL); 91 static Klass* java_lang_management_MemoryPoolMXBean_klass(TRAPS); 92 static Klass* java_lang_management_MemoryManagerMXBean_klass(TRAPS); 93 static Klass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS); 94 static Klass* sun_management_Sensor_klass(TRAPS) 95 NOT_MANAGEMENT_RETURN_(NULL); 96 static Klass* sun_management_ManagementFactory_klass(TRAPS) 97 NOT_MANAGEMENT_RETURN_(NULL); 98 static Klass* sun_management_GarbageCollectorImpl_klass(TRAPS) 99 NOT_MANAGEMENT_RETURN_(NULL); 100 static Klass* com_sun_management_GcInfo_klass(TRAPS) 101 NOT_MANAGEMENT_RETURN_(NULL); 102 103 static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS); 104 static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, objArrayHandle monitors_array, typeArrayHandle depths_array, objArrayHandle synchronizers_array, TRAPS); 105 }; 106 107 class TraceVmCreationTime : public StackObj { 108 private: 109 TimeStamp _timer; 110 jlong _begin_time; 111 112 public: 113 TraceVmCreationTime() {} 114 ~TraceVmCreationTime() {} 115 116 void start() 117 { _timer.update_to(0); _begin_time = os::javaTimeMillis(); } 118 119 /** 120 * Only call this if initialization completes successfully; it will 121 * crash if PerfMemory_exit() has already been called (usually by |