That is good news. Just for interest, which JVM version are you using?
On 2/16/06, Aaron Smuts <[EMAIL PROTECTED]> wrote: > > 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] > >