506 lines · 16.8 KB · Java
RawDownload
/* * Copyright (c) 2003, 2008, 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 * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */package sun.management.snmp.jvminstr; // java imports//import java.util.Map; // jmx imports//import com.sun.jmx.snmp.SnmpStatusException;import com.sun.jmx.snmp.SnmpDefinitions; // jdmk imports// import java.lang.management.MemoryUsage;import java.lang.management.MemoryType;import java.lang.management.MemoryPoolMXBean; import sun.management.snmp.jvmmib.JvmMemPoolEntryMBean;import sun.management.snmp.jvmmib.EnumJvmMemPoolState;import sun.management.snmp.jvmmib.EnumJvmMemPoolType;import sun.management.snmp.jvmmib.EnumJvmMemPoolThreshdSupport;import sun.management.snmp.jvmmib.EnumJvmMemPoolCollectThreshdSupport;import sun.management.snmp.util.MibLogger;import sun.management.snmp.util.JvmContextFactory; /** * The class is used for implementing the "JvmMemPoolEntry" group. */public class JvmMemPoolEntryImpl implements JvmMemPoolEntryMBean {     /**     * Variable for storing the value of "JvmMemPoolIndex".     *     * "An index value opaquely computed by the agent which uniquely     * identifies a row in the jvmMemPoolTable.     * "     *     */    final protected int jvmMemPoolIndex;      final static String memoryTag = "jvmMemPoolEntry.getUsage";    final static String peakMemoryTag = "jvmMemPoolEntry.getPeakUsage";    final static String collectMemoryTag =        "jvmMemPoolEntry.getCollectionUsage";    final static MemoryUsage ZEROS = new MemoryUsage(0,0,0,0);     final String entryMemoryTag;    final String entryPeakMemoryTag;    final String entryCollectMemoryTag;     MemoryUsage getMemoryUsage() {        try {            final Map<Object, Object> m = JvmContextFactory.getUserData();             if (m != null) {                final MemoryUsage cached = (MemoryUsage)                    m.get(entryMemoryTag);                if (cached != null) {                    log.debug("getMemoryUsage",entryMemoryTag+                          " found in cache.");                    return cached;                }                 MemoryUsage u = pool.getUsage();                if (u == null) u = ZEROS;                 m.put(entryMemoryTag,u);                return u;            }            // Should never come here.            // Log error!            log.trace("getMemoryUsage", "ERROR: should never come here!");            return pool.getUsage();        } catch (RuntimeException x) {            log.trace("getMemoryUsage",                  "Failed to get MemoryUsage: " + x);            log.debug("getMemoryUsage",x);            throw x;        }     }     MemoryUsage getPeakMemoryUsage() {        try {            final Map<Object, Object> m = JvmContextFactory.getUserData();             if (m != null) {                final MemoryUsage cached = (MemoryUsage)                    m.get(entryPeakMemoryTag);                if (cached != null) {                    if (log.isDebugOn())                        log.debug("getPeakMemoryUsage",                              entryPeakMemoryTag + " found in cache.");                    return cached;                }                 MemoryUsage u = pool.getPeakUsage();                if (u == null) u = ZEROS;                 m.put(entryPeakMemoryTag,u);                return u;            }            // Should never come here.            // Log error!            log.trace("getPeakMemoryUsage", "ERROR: should never come here!");            return ZEROS;        } catch (RuntimeException x) {            log.trace("getPeakMemoryUsage",                  "Failed to get MemoryUsage: " + x);            log.debug("getPeakMemoryUsage",x);            throw x;        }     }     MemoryUsage getCollectMemoryUsage() {        try {            final Map<Object, Object> m = JvmContextFactory.getUserData();             if (m != null) {                final MemoryUsage cached = (MemoryUsage)                    m.get(entryCollectMemoryTag);                if (cached != null) {                    if (log.isDebugOn())                        log.debug("getCollectMemoryUsage",                                  entryCollectMemoryTag + " found in cache.");                    return cached;                }                 MemoryUsage u = pool.getCollectionUsage();                if (u == null) u = ZEROS;                 m.put(entryCollectMemoryTag,u);                return u;            }            // Should never come here.            // Log error!            log.trace("getCollectMemoryUsage",                      "ERROR: should never come here!");            return ZEROS;        } catch (RuntimeException x) {            log.trace("getPeakMemoryUsage",                  "Failed to get MemoryUsage: " + x);            log.debug("getPeakMemoryUsage",x);            throw x;        }     }     final MemoryPoolMXBean pool;     /**     * Constructor for the "JvmMemPoolEntry" group.     */    public JvmMemPoolEntryImpl(MemoryPoolMXBean mp, final int index) {        this.pool=mp;        this.jvmMemPoolIndex = index;        this.entryMemoryTag = memoryTag + "." + index;        this.entryPeakMemoryTag = peakMemoryTag + "." + index;        this.entryCollectMemoryTag = collectMemoryTag + "." + index;    }     /**     * Getter for the "JvmMemPoolMaxSize" variable.     */    public Long getJvmMemPoolMaxSize() throws SnmpStatusException {        final long val = getMemoryUsage().getMax();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolUsed" variable.     */    public Long getJvmMemPoolUsed() throws SnmpStatusException {        final long val = getMemoryUsage().getUsed();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolInitSize" variable.     */    public Long getJvmMemPoolInitSize() throws SnmpStatusException {        final long val = getMemoryUsage().getInit();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolCommitted" variable.     */    public Long getJvmMemPoolCommitted() throws SnmpStatusException {        final long val = getMemoryUsage().getCommitted();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolPeakMaxSize" variable.     */    public Long getJvmMemPoolPeakMaxSize() throws SnmpStatusException {        final long val = getPeakMemoryUsage().getMax();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolPeakUsed" variable.     */    public Long getJvmMemPoolPeakUsed() throws SnmpStatusException {        final long val = getPeakMemoryUsage().getUsed();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolPeakCommitted" variable.     */    public Long getJvmMemPoolPeakCommitted() throws SnmpStatusException {        final long val = getPeakMemoryUsage().getCommitted();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolCollectMaxSize" variable.     */    public Long getJvmMemPoolCollectMaxSize() throws SnmpStatusException {        final long val = getCollectMemoryUsage().getMax();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolCollectUsed" variable.     */    public Long getJvmMemPoolCollectUsed() throws SnmpStatusException {        final long val = getCollectMemoryUsage().getUsed();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolCollectCommitted" variable.     */    public Long getJvmMemPoolCollectCommitted() throws SnmpStatusException {        final long val = getCollectMemoryUsage().getCommitted();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolThreshold" variable.     */    public Long getJvmMemPoolThreshold() throws SnmpStatusException {        if (!pool.isUsageThresholdSupported())            return JvmMemoryImpl.Long0;        final long val = pool.getUsageThreshold();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Setter for the "JvmMemPoolThreshold" variable.     */    public void setJvmMemPoolThreshold(Long x) throws SnmpStatusException {        final long val = x.longValue();        if (val < 0 )            throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue);        // This should never throw an exception has the checks have        // already been performed in checkJvmMemPoolThreshold().        //        pool.setUsageThreshold(val);    }     /**     * Checker for the "JvmMemPoolThreshold" variable.     */    public void checkJvmMemPoolThreshold(Long x) throws SnmpStatusException {        // if threshold is -1, it means that low memory detection is not        // supported.         if (!pool.isUsageThresholdSupported())            throw new                SnmpStatusException(SnmpDefinitions.snmpRspInconsistentValue);        final long val = x.longValue();        if (val < 0 )            throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue);    }     /**     * Getter for the "JvmMemPoolThreshdSupport" variable.     */    public EnumJvmMemPoolThreshdSupport getJvmMemPoolThreshdSupport()        throws SnmpStatusException {        if (pool.isUsageThresholdSupported())            return EnumJvmMemPoolThreshdSupported;        else            return EnumJvmMemPoolThreshdUnsupported;    }     /**     * Getter for the "JvmMemPoolThreshdCount" variable.     */    public Long getJvmMemPoolThreshdCount()        throws SnmpStatusException {        if (!pool.isUsageThresholdSupported())            return JvmMemoryImpl.Long0;        final long val = pool.getUsageThresholdCount();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Getter for the "JvmMemPoolCollectThreshold" variable.     */    public Long getJvmMemPoolCollectThreshold() throws SnmpStatusException {        if (!pool.isCollectionUsageThresholdSupported())            return JvmMemoryImpl.Long0;        final long val = pool.getCollectionUsageThreshold();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     /**     * Setter for the "JvmMemPoolCollectThreshold" variable.     */    public void setJvmMemPoolCollectThreshold(Long x)        throws SnmpStatusException {        final long val = x.longValue();        if (val < 0 )            throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue);        // This should never throw an exception has the checks have        // already been performed in checkJvmMemPoolCollectThreshold().        //        pool.setCollectionUsageThreshold(val);    }     /**     * Checker for the "JvmMemPoolCollectThreshold" variable.     */    public void checkJvmMemPoolCollectThreshold(Long x)        throws SnmpStatusException {        // if threshold is -1, it means that low memory detection is not        // supported.         if (!pool.isCollectionUsageThresholdSupported())            throw new                SnmpStatusException(SnmpDefinitions.snmpRspInconsistentValue);        final long val = x.longValue();        if (val < 0 )            throw new SnmpStatusException(SnmpDefinitions.snmpRspWrongValue);    }     /**     * Getter for the "JvmMemPoolThreshdSupport" variable.     */    public EnumJvmMemPoolCollectThreshdSupport        getJvmMemPoolCollectThreshdSupport()        throws SnmpStatusException {        if (pool.isCollectionUsageThresholdSupported())            return EnumJvmMemPoolCollectThreshdSupported;        else            return EnumJvmMemPoolCollectThreshdUnsupported;    }     /**     * Getter for the "JvmMemPoolCollectThreshdCount" variable.     */    public Long getJvmMemPoolCollectThreshdCount()        throws SnmpStatusException {        if (!pool.isCollectionUsageThresholdSupported())            return JvmMemoryImpl.Long0;        final long val = pool.getCollectionUsageThresholdCount();        if (val > -1) return  new Long(val);        else return JvmMemoryImpl.Long0;    }     public static EnumJvmMemPoolType jvmMemPoolType(MemoryType type)        throws SnmpStatusException {        if (type.equals(MemoryType.HEAP))            return  EnumJvmMemPoolTypeHeap;        else if (type.equals(MemoryType.NON_HEAP))            return EnumJvmMemPoolTypeNonHeap;        throw new SnmpStatusException(SnmpStatusException.snmpRspWrongValue);    }     /**     * Getter for the "JvmMemPoolType" variable.     */    public EnumJvmMemPoolType getJvmMemPoolType() throws SnmpStatusException {        return jvmMemPoolType(pool.getType());    }     /**     * Getter for the "JvmMemPoolName" variable.     */    public String getJvmMemPoolName() throws SnmpStatusException {        return JVM_MANAGEMENT_MIB_IMPL.validJavaObjectNameTC(pool.getName());    }     /**     * Getter for the "JvmMemPoolIndex" variable.     */    public Integer getJvmMemPoolIndex() throws SnmpStatusException {        return new Integer(jvmMemPoolIndex);    }      /**     * Getter for the "JvmMemPoolState" variable.     */    public EnumJvmMemPoolState getJvmMemPoolState()        throws SnmpStatusException {        if (pool.isValid())            return JvmMemPoolStateValid;        else            return JvmMemPoolStateInvalid;    }     /**     * Getter for the "JvmMemPoolPeakReset" variable.     */    public synchronized Long getJvmMemPoolPeakReset()        throws SnmpStatusException {        return new Long(jvmMemPoolPeakReset);    }     /**     * Setter for the "JvmMemPoolPeakReset" variable.     */    public synchronized void setJvmMemPoolPeakReset(Long x)        throws SnmpStatusException {        final long l = x.longValue();        if (l > jvmMemPoolPeakReset) {            final long stamp = System.currentTimeMillis();            pool.resetPeakUsage();            jvmMemPoolPeakReset = stamp;            log.debug("setJvmMemPoolPeakReset",                      "jvmMemPoolPeakReset="+stamp);        }    }     /**     * Checker for the "JvmMemPoolPeakReset" variable.     */    public void checkJvmMemPoolPeakReset(Long x) throws SnmpStatusException {    }     /* Last time peak usage was reset */    private long jvmMemPoolPeakReset = 0;     private final static EnumJvmMemPoolState JvmMemPoolStateValid =        new EnumJvmMemPoolState("valid");    private final static EnumJvmMemPoolState JvmMemPoolStateInvalid =        new EnumJvmMemPoolState("invalid");     private static final EnumJvmMemPoolType EnumJvmMemPoolTypeHeap =        new EnumJvmMemPoolType("heap");    private static final EnumJvmMemPoolType EnumJvmMemPoolTypeNonHeap =        new EnumJvmMemPoolType("nonheap");     private static final EnumJvmMemPoolThreshdSupport        EnumJvmMemPoolThreshdSupported =        new EnumJvmMemPoolThreshdSupport("supported");    private static final EnumJvmMemPoolThreshdSupport        EnumJvmMemPoolThreshdUnsupported =        new EnumJvmMemPoolThreshdSupport("unsupported");     private static final EnumJvmMemPoolCollectThreshdSupport        EnumJvmMemPoolCollectThreshdSupported =        new EnumJvmMemPoolCollectThreshdSupport("supported");    private static final EnumJvmMemPoolCollectThreshdSupport

Lines 1–500 of 506.