32 * 33 * Bump the version number when either of the following happens: 34 * 35 * 1. There is a change in functions in JmmInterface. 36 * 37 * 2. There is a change in the contract between VM and Java classes. 38 */ 39 40 #include "jni.h" 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 enum { 47 JMM_VERSION_1 = 0x20010000, 48 JMM_VERSION_1_0 = 0x20010000, 49 JMM_VERSION_1_1 = 0x20010100, // JDK 6 50 JMM_VERSION_1_2 = 0x20010200, // JDK 7 51 JMM_VERSION_1_2_1 = 0x20010201, // JDK 7 GA 52 JMM_VERSION = 0x20010202 53 }; 54 55 typedef struct { 56 unsigned int isLowMemoryDetectionSupported : 1; 57 unsigned int isCompilationTimeMonitoringSupported : 1; 58 unsigned int isThreadContentionMonitoringSupported : 1; 59 unsigned int isCurrentThreadCpuTimeSupported : 1; 60 unsigned int isOtherThreadCpuTimeSupported : 1; 61 unsigned int isBootClassPathSupported : 1; 62 unsigned int isObjectMonitorUsageSupported : 1; 63 unsigned int isSynchronizerUsageSupported : 1; 64 unsigned int isThreadAllocatedMemorySupported : 1; 65 unsigned int : 23; 66 } jmmOptionalSupport; 67 68 typedef enum { 69 JMM_CLASS_LOADED_COUNT = 1, /* Total number of loaded classes */ 70 JMM_CLASS_UNLOADED_COUNT = 2, /* Total number of unloaded classes */ 71 JMM_THREAD_TOTAL_COUNT = 3, /* Total number of threads that have been started */ 72 JMM_THREAD_LIVE_COUNT = 4, /* Current number of live threads */ 73 JMM_THREAD_PEAK_COUNT = 5, /* Peak number of live threads */ 74 JMM_THREAD_DAEMON_COUNT = 6, /* Current number of daemon threads */ 75 JMM_JVM_INIT_DONE_TIME_MS = 7, /* Time when the JVM finished initialization */ 76 JMM_COMPILE_TOTAL_TIME_MS = 8, /* Total accumulated time spent in compilation */ 77 JMM_GC_TIME_MS = 9, /* Total accumulated time spent in collection */ 78 JMM_GC_COUNT = 10, /* Total number of collections */ 79 80 JMM_INTERNAL_ATTRIBUTE_INDEX = 100, 81 JMM_CLASS_LOADED_BYTES = 101, /* Number of bytes loaded instance classes */ 82 JMM_CLASS_UNLOADED_BYTES = 102, /* Number of bytes unloaded instance classes */ 83 JMM_TOTAL_CLASSLOAD_TIME_MS = 103, /* Accumulated VM class loader time (TraceClassLoadingTime) */ 84 JMM_VM_GLOBAL_COUNT = 104, /* Number of VM internal flags */ 85 JMM_SAFEPOINT_COUNT = 105, /* Total number of safepoints */ 173 174 /* Caller has to set the following fields before calling GetLastGCStat 175 * o usage_before_gc - array of MemoryUsage objects 176 * o usage_after_gc - array of MemoryUsage objects 177 * o gc_ext_attribute_values_size - size of gc_ext_atttribute_values array 178 * o gc_ext_attribtue_values - array of jvalues 179 */ 180 typedef struct { 181 jlong gc_index; /* Index of the collections */ 182 jlong start_time; /* Start time of the GC */ 183 jlong end_time; /* End time of the GC */ 184 jobjectArray usage_before_gc; /* Memory usage array before GC */ 185 jobjectArray usage_after_gc; /* Memory usage array after GC */ 186 jint gc_ext_attribute_values_size; /* set by the caller of GetGCStat */ 187 jvalue* gc_ext_attribute_values; /* Array of jvalue for GC extension attributes */ 188 jint num_gc_ext_attributes; /* number of GC extension attribute values s are filled */ 189 /* -1 indicates gc_ext_attribute_values is not big enough */ 190 } jmmGCStat; 191 192 typedef struct { 193 const char* name; 194 const char* description; 195 const char* impact; 196 int num_arguments; 197 jboolean enabled; 198 } dcmdInfo; 199 200 typedef struct { 201 const char* name; 202 const char* description; 203 const char* type; 204 const char* default_string; 205 jboolean mandatory; 206 jboolean option; 207 int position; 208 } dcmdArgInfo; 209 210 typedef struct jmmInterface_1_ { 211 void* reserved1; 212 void* reserved2; 213 214 jint (JNICALL *GetVersion) (JNIEnv *env); 215 216 jint (JNICALL *GetOptionalSupport) (JNIEnv *env, 217 jmmOptionalSupport* support_ptr); 218 219 /* This is used by JDK 6 and earlier. 220 * For JDK 7 and after, use GetInputArgumentArray. 221 */ 222 jobject (JNICALL *GetInputArguments) (JNIEnv *env); 223 224 jint (JNICALL *GetThreadInfo) (JNIEnv *env, 225 jlongArray ids, 226 jint maxDepth, 227 jobjectArray infoArray); 310 void* reserved6; 311 jobjectArray (JNICALL *DumpThreads) (JNIEnv *env, 312 jlongArray ids, 313 jboolean lockedMonitors, 314 jboolean lockedSynchronizers); 315 void (JNICALL *SetGCNotificationEnabled) (JNIEnv *env, 316 jobject mgr, 317 jboolean enabled); 318 jobjectArray (JNICALL *GetDiagnosticCommands) (JNIEnv *env); 319 void (JNICALL *GetDiagnosticCommandInfo) 320 (JNIEnv *env, 321 jobjectArray cmds, 322 dcmdInfo *infoArray); 323 void (JNICALL *GetDiagnosticCommandArgumentsInfo) 324 (JNIEnv *env, 325 jstring commandName, 326 dcmdArgInfo *infoArray); 327 jstring (JNICALL *ExecuteDiagnosticCommand) 328 (JNIEnv *env, 329 jstring command); 330 } JmmInterface; 331 332 #ifdef __cplusplus 333 } /* extern "C" */ 334 #endif /* __cplusplus */ 335 336 #endif /* !_JAVA_JMM_H_ */ | 32 * 33 * Bump the version number when either of the following happens: 34 * 35 * 1. There is a change in functions in JmmInterface. 36 * 37 * 2. There is a change in the contract between VM and Java classes. 38 */ 39 40 #include "jni.h" 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 enum { 47 JMM_VERSION_1 = 0x20010000, 48 JMM_VERSION_1_0 = 0x20010000, 49 JMM_VERSION_1_1 = 0x20010100, // JDK 6 50 JMM_VERSION_1_2 = 0x20010200, // JDK 7 51 JMM_VERSION_1_2_1 = 0x20010201, // JDK 7 GA 52 JMM_VERSION_1_2_2 = 0x20010202, 53 JMM_VERSION = 0x20010203 54 }; 55 56 typedef struct { 57 unsigned int isLowMemoryDetectionSupported : 1; 58 unsigned int isCompilationTimeMonitoringSupported : 1; 59 unsigned int isThreadContentionMonitoringSupported : 1; 60 unsigned int isCurrentThreadCpuTimeSupported : 1; 61 unsigned int isOtherThreadCpuTimeSupported : 1; 62 unsigned int isBootClassPathSupported : 1; 63 unsigned int isObjectMonitorUsageSupported : 1; 64 unsigned int isSynchronizerUsageSupported : 1; 65 unsigned int isThreadAllocatedMemorySupported : 1; 66 unsigned int isRemoteDiagnosticCommandsSupported : 1; 67 unsigned int : 22; 68 } jmmOptionalSupport; 69 70 typedef enum { 71 JMM_CLASS_LOADED_COUNT = 1, /* Total number of loaded classes */ 72 JMM_CLASS_UNLOADED_COUNT = 2, /* Total number of unloaded classes */ 73 JMM_THREAD_TOTAL_COUNT = 3, /* Total number of threads that have been started */ 74 JMM_THREAD_LIVE_COUNT = 4, /* Current number of live threads */ 75 JMM_THREAD_PEAK_COUNT = 5, /* Peak number of live threads */ 76 JMM_THREAD_DAEMON_COUNT = 6, /* Current number of daemon threads */ 77 JMM_JVM_INIT_DONE_TIME_MS = 7, /* Time when the JVM finished initialization */ 78 JMM_COMPILE_TOTAL_TIME_MS = 8, /* Total accumulated time spent in compilation */ 79 JMM_GC_TIME_MS = 9, /* Total accumulated time spent in collection */ 80 JMM_GC_COUNT = 10, /* Total number of collections */ 81 82 JMM_INTERNAL_ATTRIBUTE_INDEX = 100, 83 JMM_CLASS_LOADED_BYTES = 101, /* Number of bytes loaded instance classes */ 84 JMM_CLASS_UNLOADED_BYTES = 102, /* Number of bytes unloaded instance classes */ 85 JMM_TOTAL_CLASSLOAD_TIME_MS = 103, /* Accumulated VM class loader time (TraceClassLoadingTime) */ 86 JMM_VM_GLOBAL_COUNT = 104, /* Number of VM internal flags */ 87 JMM_SAFEPOINT_COUNT = 105, /* Total number of safepoints */ 175 176 /* Caller has to set the following fields before calling GetLastGCStat 177 * o usage_before_gc - array of MemoryUsage objects 178 * o usage_after_gc - array of MemoryUsage objects 179 * o gc_ext_attribute_values_size - size of gc_ext_atttribute_values array 180 * o gc_ext_attribtue_values - array of jvalues 181 */ 182 typedef struct { 183 jlong gc_index; /* Index of the collections */ 184 jlong start_time; /* Start time of the GC */ 185 jlong end_time; /* End time of the GC */ 186 jobjectArray usage_before_gc; /* Memory usage array before GC */ 187 jobjectArray usage_after_gc; /* Memory usage array after GC */ 188 jint gc_ext_attribute_values_size; /* set by the caller of GetGCStat */ 189 jvalue* gc_ext_attribute_values; /* Array of jvalue for GC extension attributes */ 190 jint num_gc_ext_attributes; /* number of GC extension attribute values s are filled */ 191 /* -1 indicates gc_ext_attribute_values is not big enough */ 192 } jmmGCStat; 193 194 typedef struct { 195 const char* name; /* Name of the diagnostic command */ 196 const char* description; /* Short description */ 197 const char* impact; /* Impact on the JVM */ 198 const char* permission_class; /* Class name of the required permission if any */ 199 const char* permission_name; /* Permission name of the required permission if any */ 200 const char* permission_action; /* Action name of the required permission if any*/ 201 int num_arguments; /* Number of supported options or arguments */ 202 jboolean enabled; /* True if the diagnostic command can be invoked, false otherwise*/ 203 204 } dcmdInfo; 205 206 typedef struct { 207 const char* name; /* Option/Argument name*/ 208 const char* description; /* Short description */ 209 const char* type; /* Type: STRING, BOOLEAN, etc. */ 210 const char* default_string; /* Default value in a parsable string */ 211 jboolean mandatory; /* True if the option/argument is mandatory */ 212 jboolean option; /* True if it is an option, false if it is an argument */ 213 /* (see diagnosticFramework.hpp for option/argument definitions) */ 214 jboolean multiple; /* True is the option can be specified several time */ 215 int position; /* Expected position for this argument (this field is */ 216 /* meaningless for options) */ 217 } dcmdArgInfo; 218 219 typedef struct jmmInterface_1_ { 220 void* reserved1; 221 void* reserved2; 222 223 jint (JNICALL *GetVersion) (JNIEnv *env); 224 225 jint (JNICALL *GetOptionalSupport) (JNIEnv *env, 226 jmmOptionalSupport* support_ptr); 227 228 /* This is used by JDK 6 and earlier. 229 * For JDK 7 and after, use GetInputArgumentArray. 230 */ 231 jobject (JNICALL *GetInputArguments) (JNIEnv *env); 232 233 jint (JNICALL *GetThreadInfo) (JNIEnv *env, 234 jlongArray ids, 235 jint maxDepth, 236 jobjectArray infoArray); 319 void* reserved6; 320 jobjectArray (JNICALL *DumpThreads) (JNIEnv *env, 321 jlongArray ids, 322 jboolean lockedMonitors, 323 jboolean lockedSynchronizers); 324 void (JNICALL *SetGCNotificationEnabled) (JNIEnv *env, 325 jobject mgr, 326 jboolean enabled); 327 jobjectArray (JNICALL *GetDiagnosticCommands) (JNIEnv *env); 328 void (JNICALL *GetDiagnosticCommandInfo) 329 (JNIEnv *env, 330 jobjectArray cmds, 331 dcmdInfo *infoArray); 332 void (JNICALL *GetDiagnosticCommandArgumentsInfo) 333 (JNIEnv *env, 334 jstring commandName, 335 dcmdArgInfo *infoArray); 336 jstring (JNICALL *ExecuteDiagnosticCommand) 337 (JNIEnv *env, 338 jstring command); 339 void (JNICALL *SetDiagnosticFrameworkNotificationEnabled) 340 (JNIEnv *env, 341 jboolean enabled); 342 } JmmInterface; 343 344 #ifdef __cplusplus 345 } /* extern "C" */ 346 #endif /* __cplusplus */ 347 348 #endif /* !_JAVA_JMM_H_ */ |