I just built both EHCache and JCS from head, configured both similarly and ran multiple put / get rounds of 50,000. JCS, using the default LRU Memory Cache, was nearly twice as fast as EHCache in multiple trials for both puts and gets. I have the log levels for both set at info. I would like to verify my results, since they completely contradict the information on the EHCache site. From what I can tell so far, JCS is significantly faster than EHCache.
Since, neither will be a relevant bottleneck, it may be beside the point. . . . I will run more tests to confirm. Here is the data: JCS put time for 50000 = 651; millis per = 0.01302 JCS get time for 50000 = 160; millis per = 0.0032 EHCache put time for 50000 = 481; millis per = 0.00962 EHCache get time for 50000 = 110; millis per = 0.0022 JCS put time for 50000 = 240; millis per = 0.0048 JCS get time for 50000 = 90; millis per = 0.0018 EHCache put time for 50000 = 491; millis per = 0.00982 EHCache get time for 50000 = 120; millis per = 0.0024 JCS put time for 50000 = 241; millis per = 0.00482 JCS get time for 50000 = 80; millis per = 0.0016 EHCache put time for 50000 = 551; millis per = 0.01102 EHCache get time for 50000 = 110; millis per = 0.0022 JCS put time for 50000 = 240; millis per = 0.0048 JCS get time for 50000 = 90; millis per = 0.0018 EHCache put time for 50000 = 481; millis per = 0.00962 EHCache get time for 50000 = 130; millis per = 0.0026 JCS put time for 50000 = 230; millis per = 0.0046 JCS get time for 50000 = 181; millis per = 0.00362 EHCache put time for 50000 = 520; millis per = 0.0104 EHCache get time for 50000 = 101; millis per = 0.00202 JCS put time for 50000 = 220; millis per = 0.0044 JCS get time for 50000 = 90; millis per = 0.0018 EHCache put time for 50000 = 641; millis per = 0.01282 EHCache get time for 50000 = 110; millis per = 0.0022 JCS put time for 50000 = 250; millis per = 0.0050 JCS get time for 50000 = 121; millis per = 0.00242 EHCache put time for 50000 = 590; millis per = 0.0118 EHCache get time for 50000 = 101; millis per = 0.00202 JCS put time for 50000 = 260; millis per = 0.0052 JCS get time for 50000 = 100; millis per = 0.0020 EHCache put time for 50000 = 581; millis per = 0.01162 EHCache get time for 50000 = 100; millis per = 0.0020 JCS put time for 50000 = 290; millis per = 0.0058 JCS get time for 50000 = 121; millis per = 0.00242 EHCache put time for 50000 = 570; millis per = 0.0114 EHCache get time for 50000 = 121; millis per = 0.00242 JCS put time for 50000 = 210; millis per = 0.0042 JCS get time for 50000 = 120; millis per = 0.0024 EHCache put time for 50000 = 561; millis per = 0.01122 EHCache get time for 50000 = 130; millis per = 0.0026 JCS put time for 50000 = 250; millis per = 0.0050 JCS get time for 50000 = 151; millis per = 0.00302 EHCache put time for 50000 = 560; millis per = 0.0112 EHCache get time for 50000 = 111; millis per = 0.00222 JCS put time for 50000 = 250; millis per = 0.0050 JCS get time for 50000 = 100; millis per = 0.0020 EHCache put time for 50000 = 711; millis per = 0.01422 EHCache get time for 50000 = 100; millis per = 0.0020 JCS put time for 50000 = 251; millis per = 0.00502 JCS get time for 50000 = 90; millis per = 0.0018 EHCache put time for 50000 = 511; millis per = 0.01022 EHCache get time for 50000 = 90; millis per = 0.0018 JCS put time for 50000 = 220; millis per = 0.0044 JCS get time for 50000 = 100; millis per = 0.0020 EHCache put time for 50000 = 491; millis per = 0.00982 EHCache get time for 50000 = 90; millis per = 0.0018 JCS put time for 50000 = 230; millis per = 0.0046 JCS get time for 50000 = 80; millis per = 0.0016 EHCache put time for 50000 = 201; millis per = 0.00402 EHCache get time for 50000 = 390; millis per = 0.0078 JCS put time for 50000 = 201; millis per = 0.00402 JCS get time for 50000 = 120; millis per = 0.0024 EHCache put time for 50000 = 180; millis per = 0.0036 EHCache get time for 50000 = 411; millis per = 0.00822 JCS put time for 50000 = 210; millis per = 0.0042 JCS get time for 50000 = 100; millis per = 0.0020 EHCache put time for 50000 = 210; millis per = 0.0042 EHCache get time for 50000 = 381; millis per = 0.00762 JCS put time for 50000 = 240; millis per = 0.0048 JCS get time for 50000 = 90; millis per = 0.0018 EHCache put time for 50000 = 211; millis per = 0.00422 EHCache get time for 50000 = 410; millis per = 0.0082 JCS put time for 50000 = 221; millis per = 0.00442 JCS get time for 50000 = 80; millis per = 0.0016 EHCache put time for 50000 = 210; millis per = 0.0042 EHCache get time for 50000 = 411; millis per = 0.00822 JCS put time for 50000 = 220; millis per = 0.0044 JCS get time for 50000 = 80; millis per = 0.0016 EHCache put time for 50000 = 190; millis per = 0.0038 EHCache get time for 50000 = 411; millis per = 0.00822 Finished 20 loops of 50000 gets and puts Put average for JCS = 256 Put average for EHCache = 447 JCS puts took 0.57270694 times the EHCache , the goal is <1.0x Get average for JCS = 107 Get average for EHCache = 196 JCS gets took 0.54591835 times the EHCache , the goal is <1.0x Here is the test class: package org.apache.jcs; import junit.framework.TestCase; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jcs.engine.CompositeCacheAttributes; import org.apache.jcs.engine.behavior.ICompositeCacheAttributes; import org.apache.jcs.utils.struct.LRUMap; /** * Compare JCS vs ehcache performance. * * @author Aaron Smuts * */ public class JCSvsEHCachePerformanceTest extends TestCase { float ratioPut = 0; float ratioGet = 0; // the jcs to competitor float target = 1.0f; int loops = 20; int tries = 50000; /** * Compare performance between JCS and EHCache. Fail if JCS is not as fast. * Print the ratio. * * @throws Exception * */ public void testJCSvsEHCache() throws Exception { Log log = LogFactory.getLog( LRUMap.class ); if ( log.isDebugEnabled() ) { System.out.println( "The log level must be at info or above for the a performance test." ); return; } doWork(); assertTrue( this.ratioPut < target ); assertTrue( this.ratioGet < target ); } /** * This runs a series of gets and puts for both JCS and EHCache. The test * will fail if JCS is not faster. * * @throws Exception * */ public void doWork() throws Exception { int maxSize = 1000000; // create the two caches. CacheManager ehMgr = CacheManager.getInstance(); // Create an ehcache with a max size of maxSize, no swap, with items // that can expire, with maximum idle time to live of 500 seconds, and // maximum idel time of 500 seconds. Cache eh = new Cache( "testJCSvsEHCache", maxSize, false, false, 500, 500 ); ehMgr.addCache( eh ); // Create a similarly configured JCS that uses the LRU memory cache. // maxSize elements that are not eternal. No disk cache is configured. ICompositeCacheAttributes cattr = new CompositeCacheAttributes(); cattr.setMaxObjects( maxSize ); JCS jcs = JCS.getInstance( "testJCSvsEHCache" ); // run settings long start = 0; long end = 0; long time = 0; float tPer = 0; long putTotalJCS = 0; long getTotalJCS = 0; long putTotalEHCache = 0; long getTotalEHCache = 0; String jcsDisplayName = "JCS"; String ehCacheDisplayName = ""; try { for ( int j = 0; j < loops; j++ ) { jcsDisplayName = "JCS "; start = System.currentTimeMillis(); for ( int i = 0; i < tries; i++ ) { jcs.put( "key:" + i, "data" + i ); } end = System.currentTimeMillis(); time = end - start; putTotalJCS += time; tPer = Float.intBitsToFloat( (int) time ) / Float.intBitsToFloat( tries ); System.out .println( jcsDisplayName + " put time for " + tries + " = " + time + "; millis per = " + tPer ); start = System.currentTimeMillis(); for ( int i = 0; i < tries; i++ ) { jcs.get( "key:" + i ); } end = System.currentTimeMillis(); time = end - start; getTotalJCS += time; tPer = Float.intBitsToFloat( (int) time ) / Float.intBitsToFloat( tries ); System.out .println( jcsDisplayName + " get time for " + tries + " = " + time + "; millis per = " + tPer ); // ///////////////////////////////////////////////////////////// ehCacheDisplayName = "EHCache "; start = System.currentTimeMillis(); for ( int i = 0; i < tries; i++ ) { Element ehElm = new Element( "key:" + i, "data" + i ); eh.put( ehElm ); } end = System.currentTimeMillis(); time = end - start; putTotalEHCache += time; tPer = Float.intBitsToFloat( (int) time ) / Float.intBitsToFloat( tries ); System.out.println( ehCacheDisplayName + " put time for " + tries + " = " + time + "; millis per = " + tPer ); start = System.currentTimeMillis(); for ( int i = 0; i < tries; i++ ) { eh.get( "key:" + i ); } end = System.currentTimeMillis(); time = end - start; getTotalEHCache += time; tPer = Float.intBitsToFloat( (int) time ) / Float.intBitsToFloat( tries ); System.out.println( ehCacheDisplayName + " get time for " + tries + " = " + time + "; millis per = " + tPer ); System.out.println( "\n" ); } } catch ( Exception e ) { e.printStackTrace( System.out ); System.out.println( e ); } long putAvJCS = putTotalJCS / loops; long getAvJCS = getTotalJCS / loops; long putAvHashtable = putTotalEHCache / loops; long getAvHashtable = getTotalEHCache / loops; System.out.println( "Finished " + loops + " loops of " + tries + " gets and puts" ); System.out.println( "\n" ); System.out.println( "Put average for " + jcsDisplayName + " = " + putAvJCS ); System.out.println( "Put average for " + ehCacheDisplayName + " = " + putAvHashtable ); ratioPut = Float.intBitsToFloat( (int) putAvJCS ) / Float.intBitsToFloat( (int) putAvHashtable ); System.out.println( jcsDisplayName + " puts took " + ratioPut + " times the " + ehCacheDisplayName + ", the goal is <" + target + "x" ); System.out.println( "\n" ); System.out.println( "Get average for " + jcsDisplayName + " = " + getAvJCS ); System.out.println( "Get average for " + ehCacheDisplayName + " = " + getAvHashtable ); ratioGet = Float.intBitsToFloat( (int) getAvJCS ) / Float.intBitsToFloat( (int) getAvHashtable ); System.out.println( jcsDisplayName + " gets took " + ratioGet + " times the " + ehCacheDisplayName + ", the goal is <" + target + "x" ); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]