/*
 * 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.
/** * 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. "
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * Getter for the "JvmMemPoolThreshdSupport" variable. */
public EnumJvmMemPoolThreshdSupport getJvmMemPoolThreshdSupport() throws SnmpStatusException { if (pool.isUsageThresholdSupported()) return EnumJvmMemPoolThreshdSupported; else return EnumJvmMemPoolThreshdUnsupported; }
Getter for the "JvmMemPoolThreshdCount" variable.
/** * 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.
/** * 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.
/** * 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.
/** * 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.
/** * Getter for the "JvmMemPoolThreshdSupport" variable. */
public EnumJvmMemPoolCollectThreshdSupport getJvmMemPoolCollectThreshdSupport() throws SnmpStatusException { if (pool.isCollectionUsageThresholdSupported()) return EnumJvmMemPoolCollectThreshdSupported; else return EnumJvmMemPoolCollectThreshdUnsupported; }
Getter for the "JvmMemPoolCollectThreshdCount" variable.
/** * 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.
/** * Getter for the "JvmMemPoolType" variable. */
public EnumJvmMemPoolType getJvmMemPoolType() throws SnmpStatusException { return jvmMemPoolType(pool.getType()); }
Getter for the "JvmMemPoolName" variable.
/** * Getter for the "JvmMemPoolName" variable. */
public String getJvmMemPoolName() throws SnmpStatusException { return JVM_MANAGEMENT_MIB_IMPL.validJavaObjectNameTC(pool.getName()); }
Getter for the "JvmMemPoolIndex" variable.
/** * Getter for the "JvmMemPoolIndex" variable. */
public Integer getJvmMemPoolIndex() throws SnmpStatusException { return new Integer(jvmMemPoolIndex); }
Getter for the "JvmMemPoolState" variable.
/** * Getter for the "JvmMemPoolState" variable. */
public EnumJvmMemPoolState getJvmMemPoolState() throws SnmpStatusException { if (pool.isValid()) return JvmMemPoolStateValid; else return JvmMemPoolStateInvalid; }
Getter for the "JvmMemPoolPeakReset" variable.
/** * Getter for the "JvmMemPoolPeakReset" variable. */
public synchronized Long getJvmMemPoolPeakReset() throws SnmpStatusException { return new Long(jvmMemPoolPeakReset); }
Setter for the "JvmMemPoolPeakReset" variable.
/** * 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.
/** * 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 EnumJvmMemPoolCollectThreshdUnsupported= new EnumJvmMemPoolCollectThreshdSupport("unsupported"); static final MibLogger log = new MibLogger(JvmMemPoolEntryImpl.class); }