< prev index next >

jdk/src/java.management/share/classes/sun/management/GarbageCollectorImpl.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 23,192 **** * questions. */ package sun.management; ! import com.sun.management.GarbageCollectorMXBean; ! import com.sun.management.GarbageCollectionNotificationInfo; import java.lang.management.ManagementFactory; - import java.lang.management.MemoryPoolMXBean; - import java.lang.management.MemoryUsage; - - import com.sun.management.GcInfo; - import javax.management.openmbean.CompositeData; - import javax.management.MBeanInfo; - import javax.management.MBeanAttributeInfo; import javax.management.ObjectName; - import javax.management.MBeanNotificationInfo; - import javax.management.Notification; - import javax.management.NotificationFilter; - import javax.management.NotificationListener; - import javax.management.ListenerNotFoundException; - - import java.util.List; - import java.util.ListIterator; - import java.util.Map; /** * Implementation class for the garbage collector. - * Standard and committed hotspot-specific metrics if any. * * ManagementFactory.getGarbageCollectorMXBeans() returns a list * of instances of this class. */ ! class GarbageCollectorImpl extends MemoryManagerImpl implements GarbageCollectorMXBean { ! GarbageCollectorImpl(String name) { super(name); } public native long getCollectionCount(); - public native long getCollectionTime(); - - - // The memory pools are static and won't be changed. - // TODO: If the hotspot implementation begins to have pools - // dynamically created and removed, this needs to be modified. - private String[] poolNames = null; - synchronized String[] getAllPoolNames() { - if (poolNames == null) { - List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans(); - poolNames = new String[pools.size()]; - int i = 0; - for (MemoryPoolMXBean m : pools) { - poolNames[i++] = m.getName(); - } - } - return poolNames; - } - - // Sun JDK extension - private GcInfoBuilder gcInfoBuilder; - - private synchronized GcInfoBuilder getGcInfoBuilder() { - if(gcInfoBuilder == null) { - gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames()); - } - return gcInfoBuilder; - } - - public GcInfo getLastGcInfo() { - GcInfo info = getGcInfoBuilder().getLastGcInfo(); - return info; - } - - private final static String notifName = - "javax.management.Notification"; - - private final static String[] gcNotifTypes = { - GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION - }; - - private MBeanNotificationInfo[] notifInfo = null; - public MBeanNotificationInfo[] getNotificationInfo() { - synchronized (this) { - if (notifInfo == null) { - notifInfo = new MBeanNotificationInfo[1]; - notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes, - notifName, - "GC Notification"); - } - } - return notifInfo; - } ! private static long seqNumber = 0; ! private static long getNextSeqNumber() { ! return ++seqNumber; ! } ! ! void createGCNotification(long timestamp, ! String gcName, ! String gcAction, ! String gcCause, ! GcInfo gcInfo) { ! ! if (!hasListeners()) { ! return; ! } ! ! Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION, ! getObjectName(), ! getNextSeqNumber(), ! timestamp, ! gcName); ! GarbageCollectionNotificationInfo info = ! new GarbageCollectionNotificationInfo(gcName, ! gcAction, ! gcCause, ! gcInfo); ! ! CompositeData cd = ! GarbageCollectionNotifInfoCompositeData.toCompositeData(info); ! notif.setUserData(cd); ! sendNotification(notif); ! } ! ! public synchronized void addNotificationListener(NotificationListener listener, ! NotificationFilter filter, ! Object handback) ! { ! boolean before = hasListeners(); ! super.addNotificationListener(listener, filter, handback); ! boolean after = hasListeners(); ! if (!before && after) { ! setNotificationEnabled(this, true); ! } ! } ! ! public synchronized void removeNotificationListener(NotificationListener listener) ! throws ListenerNotFoundException { ! boolean before = hasListeners(); ! super.removeNotificationListener(listener); ! boolean after = hasListeners(); ! if (before && !after) { ! setNotificationEnabled(this,false); ! } ! } ! ! public synchronized void removeNotificationListener(NotificationListener listener, ! NotificationFilter filter, ! Object handback) ! throws ListenerNotFoundException ! { ! boolean before = hasListeners(); ! super.removeNotificationListener(listener,filter,handback); ! boolean after = hasListeners(); ! if (before && !after) { ! setNotificationEnabled(this,false); ! } ! } public ObjectName getObjectName() { return Util.newObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, getName()); } - - native void setNotificationEnabled(GarbageCollectorMXBean gc, - boolean enabled); - } --- 23,55 ---- * questions. */ package sun.management; ! import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import javax.management.ObjectName; /** * Implementation class for the garbage collector. * * ManagementFactory.getGarbageCollectorMXBeans() returns a list * of instances of this class. */ ! public class GarbageCollectorImpl extends MemoryManagerImpl implements GarbageCollectorMXBean { ! protected GarbageCollectorImpl(String name) { super(name); } + @Override public native long getCollectionCount(); ! @Override ! public native long getCollectionTime(); + @Override public ObjectName getObjectName() { return Util.newObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, getName()); } }
< prev index next >