Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/services/jmm.h
32285 views
1
/*
2
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
#ifndef _JAVA_JMM_H_
27
#define _JAVA_JMM_H_
28
29
/*
30
* This is a private interface used by JDK for JVM monitoring
31
* and management.
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
JMM_JVM_UPTIME_MS = 11, /* The JVM uptime in milliseconds */
82
83
JMM_INTERNAL_ATTRIBUTE_INDEX = 100,
84
JMM_CLASS_LOADED_BYTES = 101, /* Number of bytes loaded instance classes */
85
JMM_CLASS_UNLOADED_BYTES = 102, /* Number of bytes unloaded instance classes */
86
JMM_TOTAL_CLASSLOAD_TIME_MS = 103, /* Accumulated VM class loader time (TraceClassLoadingTime) */
87
JMM_VM_GLOBAL_COUNT = 104, /* Number of VM internal flags */
88
JMM_SAFEPOINT_COUNT = 105, /* Total number of safepoints */
89
JMM_TOTAL_SAFEPOINTSYNC_TIME_MS = 106, /* Accumulated time spent getting to safepoints */
90
JMM_TOTAL_STOPPED_TIME_MS = 107, /* Accumulated time spent at safepoints */
91
JMM_TOTAL_APP_TIME_MS = 108, /* Accumulated time spent in Java application */
92
JMM_VM_THREAD_COUNT = 109, /* Current number of VM internal threads */
93
JMM_CLASS_INIT_TOTAL_COUNT = 110, /* Number of classes for which initializers were run */
94
JMM_CLASS_INIT_TOTAL_TIME_MS = 111, /* Accumulated time spent in class initializers */
95
JMM_METHOD_DATA_SIZE_BYTES = 112, /* Size of method data in memory */
96
JMM_CLASS_VERIFY_TOTAL_TIME_MS = 113, /* Accumulated time spent in class verifier */
97
JMM_SHARED_CLASS_LOADED_COUNT = 114, /* Number of shared classes loaded */
98
JMM_SHARED_CLASS_UNLOADED_COUNT = 115, /* Number of shared classes unloaded */
99
JMM_SHARED_CLASS_LOADED_BYTES = 116, /* Number of bytes loaded shared classes */
100
JMM_SHARED_CLASS_UNLOADED_BYTES = 117, /* Number of bytes unloaded shared classes */
101
102
JMM_OS_ATTRIBUTE_INDEX = 200,
103
JMM_OS_PROCESS_ID = 201, /* Process id of the JVM */
104
JMM_OS_MEM_TOTAL_PHYSICAL_BYTES = 202, /* Physical memory size */
105
106
JMM_GC_EXT_ATTRIBUTE_INFO_SIZE = 401 /* the size of the GC specific attributes for a given GC memory manager */
107
} jmmLongAttribute;
108
109
typedef enum {
110
JMM_VERBOSE_GC = 21,
111
JMM_VERBOSE_CLASS = 22,
112
JMM_THREAD_CONTENTION_MONITORING = 23,
113
JMM_THREAD_CPU_TIME = 24,
114
JMM_THREAD_ALLOCATED_MEMORY = 25
115
} jmmBoolAttribute;
116
117
118
enum {
119
JMM_THREAD_STATE_FLAG_SUSPENDED = 0x00100000,
120
JMM_THREAD_STATE_FLAG_NATIVE = 0x00400000
121
};
122
123
#define JMM_THREAD_STATE_FLAG_MASK 0xFFF00000
124
125
typedef enum {
126
JMM_STAT_PEAK_THREAD_COUNT = 801,
127
JMM_STAT_THREAD_CONTENTION_COUNT = 802,
128
JMM_STAT_THREAD_CONTENTION_TIME = 803,
129
JMM_STAT_THREAD_CONTENTION_STAT = 804,
130
JMM_STAT_PEAK_POOL_USAGE = 805,
131
JMM_STAT_GC_STAT = 806
132
} jmmStatisticType;
133
134
typedef enum {
135
JMM_USAGE_THRESHOLD_HIGH = 901,
136
JMM_USAGE_THRESHOLD_LOW = 902,
137
JMM_COLLECTION_USAGE_THRESHOLD_HIGH = 903,
138
JMM_COLLECTION_USAGE_THRESHOLD_LOW = 904
139
} jmmThresholdType;
140
141
/* Should match what is allowed in globals.hpp */
142
typedef enum {
143
JMM_VMGLOBAL_TYPE_UNKNOWN = 0,
144
JMM_VMGLOBAL_TYPE_JBOOLEAN = 1,
145
JMM_VMGLOBAL_TYPE_JSTRING = 2,
146
JMM_VMGLOBAL_TYPE_JLONG = 3,
147
JMM_VMGLOBAL_TYPE_JDOUBLE = 4
148
} jmmVMGlobalType;
149
150
typedef enum {
151
JMM_VMGLOBAL_ORIGIN_DEFAULT = 1, /* Default value */
152
JMM_VMGLOBAL_ORIGIN_COMMAND_LINE = 2, /* Set at command line (or JNI invocation) */
153
JMM_VMGLOBAL_ORIGIN_MANAGEMENT = 3, /* Set via management interface */
154
JMM_VMGLOBAL_ORIGIN_ENVIRON_VAR = 4, /* Set via environment variables */
155
JMM_VMGLOBAL_ORIGIN_CONFIG_FILE = 5, /* Set via config file (such as .hotspotrc) */
156
JMM_VMGLOBAL_ORIGIN_ERGONOMIC = 6, /* Set via ergonomic */
157
JMM_VMGLOBAL_ORIGIN_OTHER = 99 /* Set via some other mechanism */
158
} jmmVMGlobalOrigin;
159
160
typedef struct {
161
jstring name;
162
jvalue value;
163
jmmVMGlobalType type; /* Data type */
164
jmmVMGlobalOrigin origin; /* Default or non-default value */
165
unsigned int writeable : 1; /* dynamically writeable */
166
unsigned int external : 1; /* external supported interface */
167
unsigned int reserved : 30;
168
void *reserved1;
169
void *reserved2;
170
} jmmVMGlobal;
171
172
typedef struct {
173
const char* name;
174
char type;
175
const char* description;
176
} jmmExtAttributeInfo;
177
178
/* Caller has to set the following fields before calling GetLastGCStat
179
* o usage_before_gc - array of MemoryUsage objects
180
* o usage_after_gc - array of MemoryUsage objects
181
* o gc_ext_attribute_values_size - size of gc_ext_atttribute_values array
182
* o gc_ext_attribtue_values - array of jvalues
183
*/
184
typedef struct {
185
jlong gc_index; /* Index of the collections */
186
jlong start_time; /* Start time of the GC */
187
jlong end_time; /* End time of the GC */
188
jobjectArray usage_before_gc; /* Memory usage array before GC */
189
jobjectArray usage_after_gc; /* Memory usage array after GC */
190
jint gc_ext_attribute_values_size; /* set by the caller of GetGCStat */
191
jvalue* gc_ext_attribute_values; /* Array of jvalue for GC extension attributes */
192
jint num_gc_ext_attributes; /* number of GC extension attribute values s are filled */
193
/* -1 indicates gc_ext_attribute_values is not big enough */
194
} jmmGCStat;
195
196
typedef struct {
197
const char* name; /* Name of the diagnostic command */
198
const char* description; /* Short description */
199
const char* impact; /* Impact on the JVM */
200
const char* permission_class; /* Class name of the required permission if any */
201
const char* permission_name; /* Permission name of the required permission if any */
202
const char* permission_action; /* Action name of the required permission if any*/
203
int num_arguments; /* Number of supported options or arguments */
204
jboolean enabled; /* True if the diagnostic command can be invoked, false otherwise */
205
} dcmdInfo;
206
207
typedef struct {
208
const char* name; /* Option/Argument name*/
209
const char* description; /* Short description */
210
const char* type; /* Type: STRING, BOOLEAN, etc. */
211
const char* default_string; /* Default value in a parsable string */
212
jboolean mandatory; /* True if the option/argument is mandatory */
213
jboolean option; /* True if it is an option, false if it is an argument */
214
/* (see diagnosticFramework.hpp for option/argument definitions) */
215
jboolean multiple; /* True if the option can be specified several time */
216
int position; /* Expected position for this argument (this field is */
217
/* meaningless for options) */
218
} dcmdArgInfo;
219
220
typedef struct jmmInterface_1_ {
221
void* reserved1;
222
jlong (JNICALL *GetOneThreadAllocatedMemory)
223
(JNIEnv *env,
224
jlong thread_id);
225
226
jint (JNICALL *GetVersion) (JNIEnv *env);
227
228
jint (JNICALL *GetOptionalSupport) (JNIEnv *env,
229
jmmOptionalSupport* support_ptr);
230
231
/* This is used by JDK 6 and earlier.
232
* For JDK 7 and after, use GetInputArgumentArray.
233
*/
234
jobject (JNICALL *GetInputArguments) (JNIEnv *env);
235
236
jint (JNICALL *GetThreadInfo) (JNIEnv *env,
237
jlongArray ids,
238
jint maxDepth,
239
jobjectArray infoArray);
240
jobjectArray (JNICALL *GetInputArgumentArray) (JNIEnv *env);
241
242
jobjectArray (JNICALL *GetMemoryPools) (JNIEnv* env, jobject mgr);
243
244
jobjectArray (JNICALL *GetMemoryManagers) (JNIEnv* env, jobject pool);
245
246
jobject (JNICALL *GetMemoryPoolUsage) (JNIEnv* env, jobject pool);
247
jobject (JNICALL *GetPeakMemoryPoolUsage) (JNIEnv* env, jobject pool);
248
249
void (JNICALL *GetThreadAllocatedMemory)
250
(JNIEnv *env,
251
jlongArray ids,
252
jlongArray sizeArray);
253
254
jobject (JNICALL *GetMemoryUsage) (JNIEnv* env, jboolean heap);
255
256
jlong (JNICALL *GetLongAttribute) (JNIEnv *env, jobject obj, jmmLongAttribute att);
257
jboolean (JNICALL *GetBoolAttribute) (JNIEnv *env, jmmBoolAttribute att);
258
jboolean (JNICALL *SetBoolAttribute) (JNIEnv *env, jmmBoolAttribute att, jboolean flag);
259
260
jint (JNICALL *GetLongAttributes) (JNIEnv *env,
261
jobject obj,
262
jmmLongAttribute* atts,
263
jint count,
264
jlong* result);
265
266
jobjectArray (JNICALL *FindCircularBlockedThreads) (JNIEnv *env);
267
268
// Not used in JDK 6 or JDK 7
269
jlong (JNICALL *GetThreadCpuTime) (JNIEnv *env, jlong thread_id);
270
271
jobjectArray (JNICALL *GetVMGlobalNames) (JNIEnv *env);
272
jint (JNICALL *GetVMGlobals) (JNIEnv *env,
273
jobjectArray names,
274
jmmVMGlobal *globals,
275
jint count);
276
277
jint (JNICALL *GetInternalThreadTimes) (JNIEnv *env,
278
jobjectArray names,
279
jlongArray times);
280
281
jboolean (JNICALL *ResetStatistic) (JNIEnv *env,
282
jvalue obj,
283
jmmStatisticType type);
284
285
void (JNICALL *SetPoolSensor) (JNIEnv *env,
286
jobject pool,
287
jmmThresholdType type,
288
jobject sensor);
289
290
jlong (JNICALL *SetPoolThreshold) (JNIEnv *env,
291
jobject pool,
292
jmmThresholdType type,
293
jlong threshold);
294
jobject (JNICALL *GetPoolCollectionUsage) (JNIEnv* env, jobject pool);
295
296
jint (JNICALL *GetGCExtAttributeInfo) (JNIEnv *env,
297
jobject mgr,
298
jmmExtAttributeInfo *ext_info,
299
jint count);
300
void (JNICALL *GetLastGCStat) (JNIEnv *env,
301
jobject mgr,
302
jmmGCStat *gc_stat);
303
304
jlong (JNICALL *GetThreadCpuTimeWithKind)
305
(JNIEnv *env,
306
jlong thread_id,
307
jboolean user_sys_cpu_time);
308
void (JNICALL *GetThreadCpuTimesWithKind)
309
(JNIEnv *env,
310
jlongArray ids,
311
jlongArray timeArray,
312
jboolean user_sys_cpu_time);
313
314
jint (JNICALL *DumpHeap0) (JNIEnv *env,
315
jstring outputfile,
316
jboolean live);
317
jobjectArray (JNICALL *FindDeadlocks) (JNIEnv *env,
318
jboolean object_monitors_only);
319
void (JNICALL *SetVMGlobal) (JNIEnv *env,
320
jstring flag_name,
321
jvalue new_value);
322
jobjectArray (JNICALL *DumpThreadsMaxDepth) (JNIEnv *env,
323
jlongArray ids,
324
jboolean lockedMonitors,
325
jboolean lockedSynchronizers,
326
jint maxDepth);
327
jobjectArray (JNICALL *DumpThreads) (JNIEnv *env,
328
jlongArray ids,
329
jboolean lockedMonitors,
330
jboolean lockedSynchronizers);
331
void (JNICALL *SetGCNotificationEnabled) (JNIEnv *env,
332
jobject mgr,
333
jboolean enabled);
334
jobjectArray (JNICALL *GetDiagnosticCommands) (JNIEnv *env);
335
void (JNICALL *GetDiagnosticCommandInfo)
336
(JNIEnv *env,
337
jobjectArray cmds,
338
dcmdInfo *infoArray);
339
void (JNICALL *GetDiagnosticCommandArgumentsInfo)
340
(JNIEnv *env,
341
jstring commandName,
342
dcmdArgInfo *infoArray);
343
jstring (JNICALL *ExecuteDiagnosticCommand)
344
(JNIEnv *env,
345
jstring command);
346
void (JNICALL *SetDiagnosticFrameworkNotificationEnabled)
347
(JNIEnv *env,
348
jboolean enabled);
349
} JmmInterface;
350
351
#ifdef __cplusplus
352
} /* extern "C" */
353
#endif /* __cplusplus */
354
355
#endif /* !_JAVA_JMM_H_ */
356
357