< prev index next >

src/java.management/share/classes/sun/management/ManagementFactoryHelper.java

Print this page
rev 58228 : 8238665: Add JFR event for direct memory statistics


  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() {


< prev index next >