22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package sun.management;
27
28 import java.lang.management.*;
29 import java.lang.reflect.InvocationTargetException;
30 import java.lang.reflect.Method;
31 import javax.management.InstanceAlreadyExistsException;
32 import javax.management.InstanceNotFoundException;
33 import javax.management.MBeanServer;
34 import javax.management.MBeanRegistrationException;
35 import javax.management.NotCompliantMBeanException;
36 import javax.management.ObjectName;
37 import javax.management.RuntimeOperationsException;
38 import java.security.AccessController;
39 import java.security.PrivilegedActionException;
40 import java.security.PrivilegedExceptionAction;
41
42 import jdk.internal.access.JavaNioAccess;
43 import jdk.internal.access.SharedSecrets;
44
45 import java.util.ArrayList;
46 import java.util.List;
47
48 import java.lang.reflect.UndeclaredThrowableException;
49 import java.security.PrivilegedAction;
50 import java.util.Arrays;
51 import java.util.Collections;
52 import java.util.HashMap;
53 import java.util.Map;
54 import java.util.Optional;
55
56 /**
57 * ManagementFactoryHelper provides static factory methods to create
58 * instances of the management interface.
59 */
60 public class ManagementFactoryHelper {
61 static {
62 // make sure that the management lib is loaded within
63 // java.lang.management.ManagementFactory
64 jdk.internal.misc.Unsafe.getUnsafe().ensureClassInitialized(ManagementFactory.class);
65 }
66
67 private static final VMManagement jvm = new VMManagementImpl();
68
69 private ManagementFactoryHelper() {};
70
71 public static VMManagement getVMManagement() {
72 return jvm;
73 }
74
320 return loggingAccess.invoke("getLoggerLevel", loggerName);
321 }
322
323 @Override
324 public void setLoggerLevel(String loggerName, String levelName) {
325 loggingAccess.invoke("setLoggerLevel", loggerName, levelName);
326 }
327
328 @Override
329 public String getParentLoggerName(String loggerName) {
330 return loggingAccess.invoke("getParentLoggerName", loggerName);
331 }
332
333 private static PlatformLoggingImpl getInstance() {
334 return new PlatformLoggingImpl(new LoggingMXBeanAccess());
335 }
336
337 static final PlatformLoggingMXBean MBEAN = getInstance();
338 }
339
340 private static List<BufferPoolMXBean> bufferPools = null;
341 public static synchronized List<BufferPoolMXBean> getBufferPoolMXBeans() {
342 if (bufferPools == null) {
343 bufferPools = new ArrayList<>(2);
344 bufferPools.add(createBufferPoolMXBean(SharedSecrets.getJavaNioAccess()
345 .getDirectBufferPool()));
346 bufferPools.add(createBufferPoolMXBean(sun.nio.ch.FileChannelImpl
347 .getMappedBufferPool()));
348 bufferPools.add(createBufferPoolMXBean(sun.nio.ch.FileChannelImpl
349 .getSyncMappedBufferPool()));
350 }
351 return bufferPools;
352 }
353
354 private final static String BUFFER_POOL_MXBEAN_NAME = "java.nio:type=BufferPool";
355
356 /**
357 * Creates management interface for the given buffer pool.
358 */
359 private static BufferPoolMXBean
360 createBufferPoolMXBean(final JavaNioAccess.BufferPool pool)
361 {
362 return new BufferPoolMXBean() {
363 private volatile ObjectName objname; // created lazily
364 @Override
365 public ObjectName getObjectName() {
366 ObjectName result = objname;
367 if (result == null) {
368 synchronized (this) {
369 result = objname;
370 if (result == null) {
371 result = Util.newObjectName(BUFFER_POOL_MXBEAN_NAME +
372 ",name=" + pool.getName());
373 objname = result;
374 }
375 }
376 }
377 return result;
378 }
379 @Override
380 public String getName() {
|
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package sun.management;
27
28 import java.lang.management.*;
29 import java.lang.reflect.InvocationTargetException;
30 import java.lang.reflect.Method;
31 import javax.management.InstanceAlreadyExistsException;
32 import javax.management.InstanceNotFoundException;
33 import javax.management.MBeanServer;
34 import javax.management.MBeanRegistrationException;
35 import javax.management.NotCompliantMBeanException;
36 import javax.management.ObjectName;
37 import javax.management.RuntimeOperationsException;
38 import java.security.AccessController;
39 import java.security.PrivilegedActionException;
40 import java.security.PrivilegedExceptionAction;
41
42 import jdk.internal.access.SharedSecrets;
43 import jdk.internal.misc.VM;
44 import jdk.internal.misc.VM.BufferPool;
45
46 import java.util.ArrayList;
47 import java.util.List;
48
49 import java.lang.reflect.UndeclaredThrowableException;
50 import java.security.PrivilegedAction;
51 import java.util.Arrays;
52 import java.util.Collections;
53 import java.util.HashMap;
54 import java.util.Map;
55 import java.util.Optional;
56 import java.util.stream.Collectors;
57
58 /**
59 * ManagementFactoryHelper provides static factory methods to create
60 * instances of the management interface.
61 */
62 public class ManagementFactoryHelper {
63 static {
64 // make sure that the management lib is loaded within
65 // java.lang.management.ManagementFactory
66 jdk.internal.misc.Unsafe.getUnsafe().ensureClassInitialized(ManagementFactory.class);
67 }
68
69 private static final VMManagement jvm = new VMManagementImpl();
70
71 private ManagementFactoryHelper() {};
72
73 public static VMManagement getVMManagement() {
74 return jvm;
75 }
76
322 return loggingAccess.invoke("getLoggerLevel", loggerName);
323 }
324
325 @Override
326 public void setLoggerLevel(String loggerName, String levelName) {
327 loggingAccess.invoke("setLoggerLevel", loggerName, levelName);
328 }
329
330 @Override
331 public String getParentLoggerName(String loggerName) {
332 return loggingAccess.invoke("getParentLoggerName", loggerName);
333 }
334
335 private static PlatformLoggingImpl getInstance() {
336 return new PlatformLoggingImpl(new LoggingMXBeanAccess());
337 }
338
339 static final PlatformLoggingMXBean MBEAN = getInstance();
340 }
341
342 private static volatile List<BufferPoolMXBean> bufferPools;
343 public static List<BufferPoolMXBean> getBufferPoolMXBeans() {
344 if (bufferPools == null) {
345 synchronized (ManagementFactoryHelper.class) {
346 if (bufferPools == null) {
347 bufferPools = VM.getBufferPools().stream()
348 .map(ManagementFactoryHelper::createBufferPoolMXBean)
349 .collect(Collectors.toList());
350 }
351 }
352 }
353 return bufferPools;
354 }
355
356 private final static String BUFFER_POOL_MXBEAN_NAME = "java.nio:type=BufferPool";
357
358 /**
359 * Creates management interface for the given buffer pool.
360 */
361 private static BufferPoolMXBean
362 createBufferPoolMXBean(final BufferPool pool)
363 {
364 return new BufferPoolMXBean() {
365 private volatile ObjectName objname; // created lazily
366 @Override
367 public ObjectName getObjectName() {
368 ObjectName result = objname;
369 if (result == null) {
370 synchronized (this) {
371 result = objname;
372 if (result == null) {
373 result = Util.newObjectName(BUFFER_POOL_MXBEAN_NAME +
374 ",name=" + pool.getName());
375 objname = result;
376 }
377 }
378 }
379 return result;
380 }
381 @Override
382 public String getName() {
|