Class AbstractMemoryMonitor
- All Implemented Interfaces:
MemoryMonitor
,MemoryMonitor.Test
- Direct Known Subclasses:
NotificationMemoryMonitor
MemoryMonitor
. Base class
for different memory monitoring strategies.- Since:
- Feb 03 2007
- Author:
- Richard M. Emberson
-
Nested Class Summary
Nested classes/interfaces inherited from interface mondrian.util.MemoryMonitor
MemoryMonitor.Listener, MemoryMonitor.Test
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
addListener
(MemoryMonitor.Listener listener) Adds aListener
using the default threshold percentage.boolean
addListener
(MemoryMonitor.Listener listener, int percentage) Adds aListener
to theMemoryMonitor
with a given threshold percentage.protected long
convertPercentageToThreshold
(int percentage) Converts a percentage threshold to its corresponding memory value, (percentage * maximum-memory / 100).protected int
convertThresholdToPercentage
(long threshold) Converts a memory value to its percentage.protected long
Returns the lowest threshold from the list ofListener
s.int
Returns the default memory notification percentage.protected abstract org.apache.logging.log4j.Logger
Returns theLogger
.protected long
Returns the current lowest threshold of all registeredListener
s.protected void
notifyListeners
(long usedMemory, long maxMemory) Notifies allListener
s that memory is running short.protected void
notifyNewLowThreshold
(long newLowThreshold) Derived classes implement this method if they wish to be notified when there is a new lowest threshold.void
Clear out allListener
s and turnoff JVM memory notification.boolean
removeListener
(MemoryMonitor.Listener listener) Removes aListener
from theMemoryMonitor
.void
This should only be called when one is switching from a testMemoryMonitor
back to the default systemMemoryMonitor
.void
updateListenerThreshold
(MemoryMonitor.Listener listener, int percentage) Changes the threshold percentage of a givenListener
.protected int
Returns how much memory is currently being used as a percentage.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface mondrian.util.MemoryMonitor
getMaxMemory, getUsedMemory
-
Constructor Details
-
AbstractMemoryMonitor
protected AbstractMemoryMonitor()Constructor of this base class.
-
-
Method Details
-
getLogger
protected abstract org.apache.logging.log4j.Logger getLogger()Returns theLogger
.- Returns:
- the
Logger
.
-
getLowThreshold
protected long getLowThreshold()Returns the current lowest threshold of all registeredListener
s.- Returns:
- the lowest threshold.
-
getDefaultThresholdPercentage
public int getDefaultThresholdPercentage()Returns the default memory notification percentage.This is the value of the Mondrian
MondrianProperties.MemoryMonitorThreshold
property.- Returns:
- the default threshold percentage.
-
addListener
Description copied from interface:MemoryMonitor
Adds aListener
using the default threshold percentage.If the threshold is below the Java5 memory managment system's threshold, then the Listener is notified from within this method.
- Specified by:
addListener
in interfaceMemoryMonitor
- Parameters:
listener
- theListener
to be added.- Returns:
true
if theListener
was added andfalse
otherwise.
-
addListener
Description copied from interface:MemoryMonitor
Adds aListener
to theMemoryMonitor
with a given threshold percentage.If the threshold is below the Java5 memory managment system's threshold, then the Listener is notified from within this method.
- Specified by:
addListener
in interfaceMemoryMonitor
- Parameters:
listener
- theListener
to be added.percentage
- the threshold percentage for thisListener
.- Returns:
true
if theListener
was added andfalse
otherwise.
-
updateListenerThreshold
Description copied from interface:MemoryMonitor
Changes the threshold percentage of a givenListener
.If the new value is below the system's current value, then the
Listener
will have its notification callback called while in this method - so a client should always check if its notification method was called immediately after calling this method.This method can be used if, for example, an algorithm has different approaches that result in different memory usage profiles; one, large memory but fast and a second which is low-memory but slow. The algorithm starts with the large memory approach, receives a low memory notification, switches to the low memory approach and changes when it should be notified for this new approach. The first approach need to be notified at a lower percentage because it uses lots of memory, possibly quickly; while the second approach, possibly a file based algorithm, has smaller memory requirements and uses memory less quickly thus one can live with a higher notification threshold percentage.
- Specified by:
updateListenerThreshold
in interfaceMemoryMonitor
- Parameters:
listener
- theListener
being updated.percentage
- new percentage threshold.
-
removeListener
Description copied from interface:MemoryMonitor
Removes aListener
from theMemoryMonitor
. Returnstrue
if listener was removed andfalse
otherwise.- Specified by:
removeListener
in interfaceMemoryMonitor
- Parameters:
listener
- the listener to be removed- Returns:
true
if listener was removed.
-
removeAllListener
public void removeAllListener()Description copied from interface:MemoryMonitor
Clear out allListener
s and turnoff JVM memory notification.- Specified by:
removeAllListener
in interfaceMemoryMonitor
-
generateLowThreshold
protected long generateLowThreshold()Returns the lowest threshold from the list ofListener
s. If there are noListener
s, then return the maximum memory usage. ReturnsLong.MAX_VALUE
if there are noListener
s- Returns:
- the lowest threshold or
Long.MAX_VALUE
-
notifyListeners
protected void notifyListeners(long usedMemory, long maxMemory) Notifies allListener
s that memory is running short.- Parameters:
usedMemory
- the current memory used.maxMemory
- the maximum memory.
-
notifyNewLowThreshold
protected void notifyNewLowThreshold(long newLowThreshold) Derived classes implement this method if they wish to be notified when there is a new lowest threshold.- Parameters:
newLowThreshold
- the new low threshold.
-
convertPercentageToThreshold
protected long convertPercentageToThreshold(int percentage) Converts a percentage threshold to its corresponding memory value, (percentage * maximum-memory / 100).- Parameters:
percentage
- the threshold.- Returns:
- the memory value.
-
convertThresholdToPercentage
protected int convertThresholdToPercentage(long threshold) Converts a memory value to its percentage.- Parameters:
threshold
- the memory value.- Returns:
- the percentage.
-
usagePercentage
protected int usagePercentage()Returns how much memory is currently being used as a percentage.- Returns:
- currently used memory as a percentage.
-
resetFromTest
public void resetFromTest()Description copied from interface:MemoryMonitor.Test
This should only be called when one is switching from a testMemoryMonitor
back to the default systemMemoryMonitor
. In particular, look at theMemoryMonitorFactory
'sclearThreadLocalClassName()
method for its usage.- Specified by:
resetFromTest
in interfaceMemoryMonitor.Test
-