All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.ehcache.pool.impl.AbstractPool Maven / Gradle / Ivy

Go to download

This is the ehcache core module. Pair it with other modules for added functionality.

There is a newer version: 2.6.11
Show newest version
/**
 *  Copyright Terracotta, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package net.sf.ehcache.pool.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import net.sf.ehcache.pool.Pool;
import net.sf.ehcache.pool.PoolAccessor;
import net.sf.ehcache.pool.PoolEvictor;
import net.sf.ehcache.pool.SizeOfEngine;

/**
 * An abstract pool implementation.
 * 

* This contains all the logic of a pool except for the actual creation of accessor instances. * * @author Chris Dennis * * @param the pool store type */ public abstract class AbstractPool implements Pool { private volatile long maximumPoolSize; private final PoolEvictor evictor; private final List> poolAccessors; private final SizeOfEngine defaultSizeOfEngine; /** * Create an AbstractPool instance * * @param maximumPoolSize the maximum size of the pool, in bytes. * @param evictor the pool evictor, for cross-store eviction. * @param defaultSizeOfEngine the default SizeOf engine used by the accessors. */ public AbstractPool(long maximumPoolSize, PoolEvictor evictor, SizeOfEngine defaultSizeOfEngine) { this.maximumPoolSize = maximumPoolSize; this.evictor = evictor; this.defaultSizeOfEngine = defaultSizeOfEngine; this.poolAccessors = Collections.synchronizedList(new ArrayList>()); } /** * {@inheritDoc} */ public long getSize() { long total = 0L; for (PoolAccessor poolAccessor : poolAccessors) { total += poolAccessor.getSize(); } return total; } /** * {@inheritDoc} */ public long getMaxSize() { return maximumPoolSize; } /** * {@inheritDoc} */ public void setMaxSize(long newSize) { long oldSize = this.maximumPoolSize; this.maximumPoolSize = newSize; long sizeToEvict = oldSize - newSize; if (sizeToEvict > 0) { evictor.freeSpace(getPoolableStores(), sizeToEvict); } } /** * {@inheritDoc} */ public PoolAccessor createPoolAccessor(T store, int maxDepth, boolean abortWhenMaxDepthExceeded) { return createPoolAccessor(store, defaultSizeOfEngine.copyWith(maxDepth, abortWhenMaxDepthExceeded)); } /** * {@inheritDoc} */ public void registerPoolAccessor(PoolAccessor accessor) { poolAccessors.add(accessor); } /** * {@inheritDoc} */ public void removePoolAccessor(PoolAccessor accessor) { Iterator> iterator = poolAccessors.iterator(); while (iterator.hasNext()) { if (iterator.next() == accessor) { iterator.remove(); return; } } } /** * {@inheritDoc} */ public Collection getPoolableStores() { Collection poolableStores = new ArrayList(poolAccessors.size()); for (PoolAccessor poolAccessor : poolAccessors) { poolableStores.add(poolAccessor.getStore()); } return poolableStores; } /** * {@inheritDoc} */ public PoolEvictor getEvictor() { return evictor; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy