l0co created COLLECTIONS-469:
--------------------------------

             Summary: PassiveExpiringMap performance improvemend and refreshing 
policy
                 Key: COLLECTIONS-469
                 URL: https://issues.apache.org/jira/browse/COLLECTIONS-469
             Project: Commons Collections
          Issue Type: New Feature
          Components: Map
    Affects Versions: 4.0-beta-1
            Reporter: l0co
            Priority: Minor


A copy from COLLECTIONS-467.

Two remarks about current trunk implementation of PassiveExpiringMap.

You should additionally keep the value of the next element timeout (the 
youngest timeout) in object field, so that you don't need to iterate through 
whole map to find elements for expiration on each call. It improves performance 
by calculating only simple if for most cases:

{code}
public class PassiveExpiringMap {
  long youngestTimeoutMs = 0; // assert to have next timeout time for youngest 
element here always, or 0 if map is empty
  
  private void removeAllExpired(final long now) {
    if (youngestTimeoutMs>0 && youngestTimeoutMs<=now) {
      // do the cleanup
    }
  }
}
{code}

The second remark concerns the refreshing policy. As I can see there's no 
refreshing policy in current implementation, there should be at last two 
policies: NoRefresh (working as the current) and RefreshOnHit - which updates 
element expiration time when the element is "hit" (eg. by get()), so that the 
map always removes the least used resources.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to