1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-09-10 12:03:16 +02:00

[255390] check memory to determine whether to queue

This commit is contained in:
David McKnight 2008-12-04 21:28:19 +00:00
parent 9aa73afcd1
commit bb0ad05d71

View file

@ -12,8 +12,8 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* David McKnight (IBM) - [202822] don't need to remove children from map here
* David McKnight (IBM) - [255390] check memory to determine whether to queue
*******************************************************************************/
package org.eclipse.dstore.internal.core.util;
@ -96,25 +96,48 @@ public class DataElementRemover extends Handler
numGCed++;
}
public synchronized void addToQueueForRemoval(DataElement element)
{
synchronized (_queue)
{
if(isMemoryThresholdExceeded()) {
if(element.isSpirit()) {
unmap(element);
}
// do immediate clearing of queue since we're low on memory
clearQueue(true);
return;
}
if (_dataStore.isDoSpirit() && _dataStore == element.getDataStore())
{
QueueItem item = new QueueItem(element, System.currentTimeMillis());
_queue.add(item);
}
}
notifyInput();
}
private boolean isMemoryThresholdExceeded(){
// trying to avoid using Java 1.5
Runtime runtime = Runtime.getRuntime();
long freeMem = runtime.freeMemory();
if (freeMem < 10000){
return true;
}
return false;
}
public void handle()
{
clearQueue();
clearQueue(false);
}
public synchronized void clearQueue()
public synchronized void clearQueue(boolean force)
{
synchronized (_queue)
{
@ -139,7 +162,7 @@ public class DataElementRemover extends Handler
_dataStore.memLog("Size of queue: " + _queue.size()); //$NON-NLS-1$
ArrayList toRefresh = new ArrayList();
while (_queue.size() > 0 && System.currentTimeMillis() - ((QueueItem) _queue.getFirst()).timeStamp > _expiryTime)
while (_queue.size() > 0 && (force || System.currentTimeMillis() - ((QueueItem) _queue.getFirst()).timeStamp > _expiryTime))
{
DataElement toBeDisconnected = ((QueueItem) _queue.removeFirst()).dataElement;
if (!toBeDisconnected.isSpirit())
@ -149,6 +172,7 @@ public class DataElementRemover extends Handler
DataElement parent = toBeDisconnected.getParent();
if (!toRefresh.contains(parent))
{
//System.out.println("disconnect parent:"+parent.getName());
toRefresh.add(toBeDisconnected.getParent());
}
//_dataStore.refresh(toBeDisconnected);
@ -169,6 +193,7 @@ public class DataElementRemover extends Handler
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
_dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
System.gc();
}
}