24 */ |
24 */ |
25 |
25 |
26 package sun.management; |
26 package sun.management; |
27 |
27 |
28 import java.lang.management.MonitorInfo; |
28 import java.lang.management.MonitorInfo; |
|
29 import java.util.HashMap; |
|
30 import java.util.Map; |
29 import javax.management.openmbean.CompositeType; |
31 import javax.management.openmbean.CompositeType; |
30 import javax.management.openmbean.CompositeData; |
32 import javax.management.openmbean.CompositeData; |
31 import javax.management.openmbean.CompositeDataSupport; |
33 import javax.management.openmbean.CompositeDataSupport; |
32 import javax.management.openmbean.OpenDataException; |
34 import javax.management.openmbean.OpenDataException; |
33 import javax.management.openmbean.OpenType; |
35 import javax.management.openmbean.OpenType; |
52 MonitorInfoCompositeData micd = new MonitorInfoCompositeData(mi); |
54 MonitorInfoCompositeData micd = new MonitorInfoCompositeData(mi); |
53 return micd.getCompositeData(); |
55 return micd.getCompositeData(); |
54 } |
56 } |
55 |
57 |
56 protected CompositeData getCompositeData() { |
58 protected CompositeData getCompositeData() { |
57 // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH |
59 StackTraceElement ste = lock.getLockedStackFrame(); |
58 // MONITOR_INFO_ATTRIBUTES! |
60 CompositeData steCData = ste != null ? StackTraceElementCompositeData.toCompositeData(ste) |
59 |
61 : null; |
60 int len = MONITOR_INFO_ATTRIBUTES.length; |
62 // values may be null; can't use Map.of |
61 Object[] values = new Object[len]; |
63 Map<String,Object> items = new HashMap<>(); |
62 CompositeData li = LockInfoCompositeData.toCompositeData(lock); |
64 items.put(CLASS_NAME, lock.getClassName()); |
63 |
65 items.put(IDENTITY_HASH_CODE, lock.getIdentityHashCode()); |
64 for (int i = 0; i < len; i++) { |
66 items.put(LOCKED_STACK_FRAME, steCData); |
65 String item = MONITOR_INFO_ATTRIBUTES[i]; |
67 items.put(LOCKED_STACK_DEPTH, lock.getLockedStackDepth()); |
66 if (item.equals(LOCKED_STACK_FRAME)) { |
|
67 StackTraceElement ste = lock.getLockedStackFrame(); |
|
68 values[i] = (ste != null ? StackTraceElementCompositeData. |
|
69 toCompositeData(ste) |
|
70 : null); |
|
71 } else if (item.equals(LOCKED_STACK_DEPTH)) { |
|
72 values[i] = lock.getLockedStackDepth(); |
|
73 } else { |
|
74 values[i] = li.get(item); |
|
75 } |
|
76 } |
|
77 |
68 |
78 try { |
69 try { |
79 return new CompositeDataSupport(MONITOR_INFO_COMPOSITE_TYPE, |
70 return new CompositeDataSupport(MONITOR_INFO_COMPOSITE_TYPE, items); |
80 MONITOR_INFO_ATTRIBUTES, |
|
81 values); |
|
82 } catch (OpenDataException e) { |
71 } catch (OpenDataException e) { |
83 // Should never reach here |
72 // Should never reach here |
84 throw new AssertionError(e); |
73 throw new AssertionError(e); |
85 } |
74 } |
86 } |
75 } |
124 |
113 |
125 static CompositeType v6CompositeType() { |
114 static CompositeType v6CompositeType() { |
126 return V6_COMPOSITE_TYPE; |
115 return V6_COMPOSITE_TYPE; |
127 } |
116 } |
128 |
117 |
129 static CompositeType compositeType() { |
|
130 return MONITOR_INFO_COMPOSITE_TYPE; |
|
131 } |
|
132 |
|
133 public static String getClassName(CompositeData cd) { |
118 public static String getClassName(CompositeData cd) { |
134 return getString(cd, CLASS_NAME); |
119 return getString(cd, CLASS_NAME); |
135 } |
120 } |
136 |
121 |
137 public static int getIdentityHashCode(CompositeData cd) { |
122 public static int getIdentityHashCode(CompositeData cd) { |