< prev index next >
src/java.management/share/classes/sun/management/ThreadInfoCompositeData.java
Print this page
@@ -73,12 +73,11 @@
}
protected CompositeData getCompositeData() {
// Convert StackTraceElement[] to CompositeData[]
StackTraceElement[] stackTrace = threadInfo.getStackTrace();
- CompositeData[] stackTraceData =
- new CompositeData[stackTrace.length];
+ CompositeData[] stackTraceData = new CompositeData[stackTrace.length];
for (int i = 0; i < stackTrace.length; i++) {
StackTraceElement ste = stackTrace[i];
stackTraceData[i] = StackTraceElementCompositeData.toCompositeData(ste);
}
@@ -86,52 +85,46 @@
CompositeData lockInfoData =
LockInfoCompositeData.toCompositeData(threadInfo.getLockInfo());
// Convert LockInfo[] and MonitorInfo[] to CompositeData[]
LockInfo[] lockedSyncs = threadInfo.getLockedSynchronizers();
- CompositeData[] lockedSyncsData =
- new CompositeData[lockedSyncs.length];
+ CompositeData[] lockedSyncsData = new CompositeData[lockedSyncs.length];
for (int i = 0; i < lockedSyncs.length; i++) {
LockInfo li = lockedSyncs[i];
lockedSyncsData[i] = LockInfoCompositeData.toCompositeData(li);
}
MonitorInfo[] lockedMonitors = threadInfo.getLockedMonitors();
- CompositeData[] lockedMonitorsData =
- new CompositeData[lockedMonitors.length];
+ CompositeData[] lockedMonitorsData = new CompositeData[lockedMonitors.length];
for (int i = 0; i < lockedMonitors.length; i++) {
MonitorInfo mi = lockedMonitors[i];
lockedMonitorsData[i] = MonitorInfoCompositeData.toCompositeData(mi);
}
- // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
- // THREAD_INFO_ATTRIBUTES!
- final Object[] threadInfoItemValues = {
- threadInfo.getThreadId(),
- threadInfo.getThreadName(),
- threadInfo.getThreadState().name(),
- threadInfo.getBlockedTime(),
- threadInfo.getBlockedCount(),
- threadInfo.getWaitedTime(),
- threadInfo.getWaitedCount(),
- lockInfoData,
- threadInfo.getLockName(),
- threadInfo.getLockOwnerId(),
- threadInfo.getLockOwnerName(),
- stackTraceData,
- threadInfo.isSuspended(),
- threadInfo.isInNative(),
- lockedMonitorsData,
- lockedSyncsData,
- threadInfo.isDaemon(),
- threadInfo.getPriority(),
- };
+ // values may be null; can't use Map.of
+ Map<String,Object> items = new HashMap<>();
+ items.put(THREAD_ID, threadInfo.getThreadId());
+ items.put(THREAD_NAME, threadInfo.getThreadName());
+ items.put(THREAD_STATE, threadInfo.getThreadState().name());
+ items.put(BLOCKED_TIME, threadInfo.getBlockedTime());
+ items.put(BLOCKED_COUNT, threadInfo.getBlockedCount());
+ items.put(WAITED_TIME, threadInfo.getWaitedTime());
+ items.put(WAITED_COUNT, threadInfo.getWaitedCount());
+ items.put(LOCK_INFO, lockInfoData);
+ items.put(LOCK_NAME, threadInfo.getLockName());
+ items.put(LOCK_OWNER_ID, threadInfo.getLockOwnerId());
+ items.put(LOCK_OWNER_NAME, threadInfo.getLockOwnerName());
+ items.put(STACK_TRACE, stackTraceData);
+ items.put(SUSPENDED, threadInfo.isSuspended());
+ items.put(IN_NATIVE, threadInfo.isInNative());
+ items.put(LOCKED_MONITORS, lockedMonitorsData);
+ items.put(LOCKED_SYNCS, lockedSyncsData);
+ items.put(DAEMON, threadInfo.isDaemon());
+ items.put(PRIORITY, threadInfo.getPriority());
try {
- return new CompositeDataSupport(compositeType(),
- THREAD_INFO_ATTRIBTUES,
- threadInfoItemValues);
+ return new CompositeDataSupport(ThreadInfoCompositeTypes.ofVersion(RUNTIME_VERSION), items);
} catch (OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
@@ -181,14 +174,10 @@
private static final String[] V9_ATTRIBUTES = {
DAEMON,
PRIORITY,
};
- private static final String[] THREAD_INFO_ATTRIBTUES =
- Stream.of(V5_ATTRIBUTES, V6_ATTRIBUTES, V9_ATTRIBUTES)
- .flatMap(Arrays::stream).toArray(String[]::new);
-
public long threadId() {
return getLong(cdata, THREAD_ID);
}
public String threadName() {
@@ -363,16 +352,12 @@
throw new IllegalArgumentException(
"Unexpected composite type for ThreadInfo of version " + version);
}
}
- public static CompositeType compositeType() {
- return ThreadInfoCompositeTypes.compositeTypes.get(0);
- }
-
+ static final int RUNTIME_VERSION = Runtime.version().feature();
static class ThreadInfoCompositeTypes {
- static final int CURRENT = Runtime.version().feature();
static final Map<Integer, CompositeType> compositeTypes = initCompositeTypes();
/*
* Returns CompositeType of the given runtime version
*/
static CompositeType ofVersion(int version) {
@@ -380,11 +365,11 @@
}
static Map<Integer, CompositeType> initCompositeTypes() {
Map<Integer, CompositeType> types = new HashMap<>();
CompositeType ctype = initCompositeType();
- types.put(CURRENT, ctype);
+ types.put(RUNTIME_VERSION, ctype);
types.put(5, initV5CompositeType(ctype));
types.put(6, initV6CompositeType(ctype));
return types;
}
< prev index next >