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:
parent
9aa73afcd1
commit
bb0ad05d71
1 changed files with 31 additions and 6 deletions
|
@ -12,8 +12,8 @@
|
||||||
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
|
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* {Name} (company) - description of contribution.
|
|
||||||
* David McKnight (IBM) - [202822] don't need to remove children from map here
|
* 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;
|
package org.eclipse.dstore.internal.core.util;
|
||||||
|
@ -96,25 +96,48 @@ public class DataElementRemover extends Handler
|
||||||
numGCed++;
|
numGCed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public synchronized void addToQueueForRemoval(DataElement element)
|
public synchronized void addToQueueForRemoval(DataElement element)
|
||||||
{
|
{
|
||||||
synchronized (_queue)
|
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())
|
if (_dataStore.isDoSpirit() && _dataStore == element.getDataStore())
|
||||||
{
|
{
|
||||||
QueueItem item = new QueueItem(element, System.currentTimeMillis());
|
QueueItem item = new QueueItem(element, System.currentTimeMillis());
|
||||||
_queue.add(item);
|
_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()
|
public void handle()
|
||||||
{
|
{
|
||||||
clearQueue();
|
clearQueue(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void clearQueue()
|
public synchronized void clearQueue(boolean force)
|
||||||
{
|
{
|
||||||
synchronized (_queue)
|
synchronized (_queue)
|
||||||
{
|
{
|
||||||
|
@ -139,7 +162,7 @@ public class DataElementRemover extends Handler
|
||||||
_dataStore.memLog("Size of queue: " + _queue.size()); //$NON-NLS-1$
|
_dataStore.memLog("Size of queue: " + _queue.size()); //$NON-NLS-1$
|
||||||
|
|
||||||
ArrayList toRefresh = new ArrayList();
|
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;
|
DataElement toBeDisconnected = ((QueueItem) _queue.removeFirst()).dataElement;
|
||||||
if (!toBeDisconnected.isSpirit())
|
if (!toBeDisconnected.isSpirit())
|
||||||
|
@ -149,6 +172,7 @@ public class DataElementRemover extends Handler
|
||||||
DataElement parent = toBeDisconnected.getParent();
|
DataElement parent = toBeDisconnected.getParent();
|
||||||
if (!toRefresh.contains(parent))
|
if (!toRefresh.contains(parent))
|
||||||
{
|
{
|
||||||
|
//System.out.println("disconnect parent:"+parent.getName());
|
||||||
toRefresh.add(toBeDisconnected.getParent());
|
toRefresh.add(toBeDisconnected.getParent());
|
||||||
}
|
}
|
||||||
//_dataStore.refresh(toBeDisconnected);
|
//_dataStore.refresh(toBeDisconnected);
|
||||||
|
@ -169,6 +193,7 @@ public class DataElementRemover extends Handler
|
||||||
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
|
_dataStore.memLog("Elements disconnected so far: " + numDisconnected); //$NON-NLS-1$
|
||||||
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
|
_dataStore.memLog("Spirit elements cleaned so far: " + numRemoved); //$NON-NLS-1$
|
||||||
_dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
|
_dataStore.memLog("DataElements GCed so far: " + numGCed); //$NON-NLS-1$
|
||||||
|
System.gc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue