com.tangosol.net.cache.SimpleCacheStatistics Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of coherence Show documentation
Show all versions of coherence Show documentation
Oracle Coherence Community Edition
/*
* Copyright (c) 2000, 2020, Oracle and/or its affiliates.
*
* Licensed under the Universal Permissive License v 1.0 as shown at
* http://oss.oracle.com/licenses/upl.
*/
package com.tangosol.net.cache;
import com.tangosol.util.Base;
import java.io.Serializable;
/**
* Implementation of the CacheStatistics interface intended for use by a cache
* to maintain its statistics.
*
* @since Coherence 2.2
* @author cp 2003.06.02
*/
public class SimpleCacheStatistics
extends Base
implements CacheStatistics, Serializable
{
// ----- constructors ---------------------------------------------------
/**
* Default constructor.
*/
public SimpleCacheStatistics()
{
}
// ----- CacheStatistics interface --------------------------------------
/**
* {@inheritDoc}
*/
public long getTotalGets()
{
return m_cCacheHits + m_cCacheMisses;
}
/**
* {@inheritDoc}
*/
public long getTotalGetsMillis()
{
return m_cHitsMillis + m_cMissesMillis;
}
/**
* {@inheritDoc}
*/
public double getAverageGetMillis()
{
double cMillis = m_cHitsMillis + m_cMissesMillis;
double cGets = m_cCacheHits + m_cCacheMisses;
return cGets == 0.0 ? 0.0 : cMillis / cGets;
}
/**
* {@inheritDoc}
*/
public long getTotalPuts()
{
return m_cCachePuts;
}
/**
* {@inheritDoc}
*/
public long getTotalPutsMillis()
{
return m_cPutsMillis;
}
/**
* {@inheritDoc}
*/
public double getAveragePutMillis()
{
double cMillis = m_cPutsMillis;
double cPuts = m_cCachePuts;
return cPuts == 0.0 ? 0.0 : cMillis / cPuts;
}
/**
* {@inheritDoc}
*/
public long getCacheHits()
{
return m_cCacheHits;
}
/**
* {@inheritDoc}
*/
public long getCacheHitsMillis()
{
return m_cHitsMillis;
}
/**
* {@inheritDoc}
*/
public double getAverageHitMillis()
{
double cMillis = m_cHitsMillis;
double cGets = m_cCacheHits;
return cGets == 0.0 ? 0.0 : cMillis / cGets;
}
/**
* {@inheritDoc}
*/
public long getCacheMisses()
{
return m_cCacheMisses;
}
/**
* {@inheritDoc}
*/
public long getCacheMissesMillis()
{
return m_cMissesMillis;
}
/**
* {@inheritDoc}
*/
public double getAverageMissMillis()
{
double cMillis = m_cMissesMillis;
double cGets = m_cCacheMisses;
return cGets == 0.0 ? 0.0 : cMillis / cGets;
}
/**
* {@inheritDoc}
*/
public double getHitProbability()
{
double cHits = m_cCacheHits;
double cTotal = cHits + m_cCacheMisses;
return cTotal == 0.0 ? 0.0 : cHits / cTotal;
}
/**
* {@inheritDoc}
*/
public long getCachePrunes()
{
return m_cCachePrunes;
}
/**
* {@inheritDoc}
*/
public long getCachePrunesMillis()
{
return m_cCachePrunesMillis;
}
/**
* Calculate the average number of milliseconds that a prune takes.
*
* @return the average number of milliseconds spent per pruning cycle
*/
public double getAveragePruneMillis()
{
double cMillis = m_cCachePrunesMillis;
double cPrunes = m_cCachePrunes;
return cPrunes == 0.0 ? 0.0 : cMillis / cPrunes;
}
/**
* {@inheritDoc}
*/
public void resetHitStatistics()
{
m_cCacheHits = 0L;
m_cCacheMisses = 0L;
m_cHitsMillis = 0L;
m_cMissesMillis = 0L;
m_cPutsMillis = 0L;
m_cCachePuts = 0L;
m_cCachePrunes = 0L;
m_cCachePrunesMillis = 0L;
}
// ----- Object methods -------------------------------------------------
/**
* For debugging purposes, format the contents of the
* SimpleCachingStatistics in a human readable format.
*
* @return a String representation of this object
*/
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append("CacheStatistics {TotalGets=")
.append(getTotalGets())
.append(", TotalGetsMillis=")
.append(getTotalGetsMillis())
.append(", AverageGetMillis=")
.append(toString(getAverageGetMillis(), 5))
.append(", TotalPuts=")
.append(getTotalPuts())
.append(", TotalPutsMillis=")
.append(getTotalPutsMillis())
.append(", AveragePutMillis=")
.append(toString(getAveragePutMillis(), 5))
.append(", CacheHits=")
.append(getCacheHits())
.append(", CacheHitsMillis=")
.append(getCacheHitsMillis())
.append(", AverageHitMillis=")
.append(toString(getAverageHitMillis(), 5))
.append(", CacheMisses=")
.append(getCacheMisses())
.append(", CacheMissesMillis=")
.append(getCacheMissesMillis())
.append(", AverageMissMillis=")
.append(toString(getAverageMissMillis(), 5))
.append(", HitProbability=")
.append(toString(getHitProbability(), 5))
.append(", Prunes=")
.append(getCachePrunes())
.append(", PruneMillis=")
.append(getCachePrunesMillis())
.append(", AveragePruneMillis=")
.append(toString(getAveragePruneMillis(), 5))
.append('}');
return sb.toString();
}
// ----- accessors, mutators and helpers --------------------------------
/**
* Register a cache hit (no timing information).
*/
public void registerHit()
{
++m_cCacheHits;
}
/**
* Register a cache hit.
*
* @param lStartMillis the time when the get operation started
*/
public void registerHit(long lStartMillis)
{
m_cCacheHits++;
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cHitsMillis += (lStopMillis - lStartMillis);
}
}
/**
* Register a multiple cache hit.
*
* @param cHits the number of hits
* @param lStartMillis the time when the get operation started
*/
public void registerHits(int cHits, long lStartMillis)
{
m_cCacheHits += cHits;
if (lStartMillis > 0)
{
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cHitsMillis += (lStopMillis - lStartMillis);
}
}
}
/**
* Register a cache miss (no timing information).
*/
public void registerMiss()
{
++m_cCacheMisses;
}
/**
* Register a cache miss.
*
* @param lStartMillis the time when the get operation started
*/
public void registerMiss(long lStartMillis)
{
m_cCacheMisses++;
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cMissesMillis += (lStopMillis - lStartMillis);
}
}
/**
* Register a multiple cache miss.
*
* @param cMisses the number of misses
* @param lStartMillis the time when the get operation started
*/
public void registerMisses(int cMisses, long lStartMillis)
{
m_cCacheMisses += cMisses;
if (lStartMillis > 0)
{
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cMissesMillis += (lStopMillis - lStartMillis);
}
}
}
/**
* Register a cache put.
*
* @param lStartMillis the time when the put operation started
*/
public void registerPut(long lStartMillis)
{
m_cCachePuts++;
if (lStartMillis > 0)
{
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cPutsMillis += (lStopMillis - lStartMillis);
}
}
}
/**
* Register a multiple cache put.
*
* @param cPuts the number of puts
* @param lStartMillis the time when the put operation started
*/
public void registerPuts(int cPuts, long lStartMillis)
{
m_cCachePuts += cPuts;
if (lStartMillis > 0)
{
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cPutsMillis += (lStopMillis - lStartMillis);
}
}
}
/**
* Register a cache prune.
*
* @param lStartMillis the time when the prune operation started
*/
public void registerCachePrune(long lStartMillis)
{
m_cCachePrunes++;
registerIncrementalCachePrune(lStartMillis);
}
/**
* Register an incremental cache prune, which is to say that the time is
* accreted but the number of prunes does not increase.
*
* @param lStartMillis the time when the prune operation started
*
* @since Coherence 3.5
*/
public void registerIncrementalCachePrune(long lStartMillis)
{
if (lStartMillis > 0)
{
long lStopMillis = getSafeTimeMillis();
if (lStopMillis > lStartMillis)
{
m_cCachePrunesMillis += (lStopMillis - lStartMillis);
}
}
}
// ----- data members ---------------------------------------------------
/**
* The rough (ie unsynchronized) number of calls that could be answered
* from the front or the back and were answered by data in the front map.
*/
protected volatile long m_cCacheHits;
/**
* Total number of milliseconds used for get operations that were hits
* since the last statistics reset.
*/
protected volatile long m_cHitsMillis;
/**
* The rough (ie unsynchronized) number of calls that could be answered
* from the front or the back and were answered by data in the back map.
*/
protected volatile long m_cCacheMisses;
/**
* Total number of milliseconds used for get operations that were misses
* since the last statistics reset.
*/
protected volatile long m_cMissesMillis;
/**
* Total number of put operations since the last statistics reset.
*/
protected volatile long m_cCachePuts;
/**
* Total number of milliseconds used for put operations since the last
* statistics reset.
*/
protected volatile long m_cPutsMillis;
/**
* Total number of evictions triggered based on the size of the cache
* since the last statistics reset.
*/
protected volatile long m_cCachePrunes;
/**
* Total number of milliseconds used for prune operations since the last
* statistics reset.
*/
protected volatile long m_cCachePrunesMillis;
}