You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-users@jakarta.apache.org by Alistair Forbes <fo...@googlemail.com> on 2006/02/16 09:11:29 UTC

Re: Initial performance test results: JCS is almost twice as fast as EHCache at gets and puts

That is good news. Just for interest, which JVM version are you using?

On 2/16/06, Aaron Smuts <as...@yahoo.com> 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: jcs-users-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: jcs-users-help@jakarta.apache.org
>
>

Re: Initial performance test results: JCS is almost twice as fast as EHCache at gets and puts

Posted by Aaron Smuts <as...@yahoo.com>.
I'm running tests on 1.4.2.

Aaron



--- Alistair Forbes <fo...@googlemail.com> wrote:

> That is good news. Just for interest, which JVM
> version are you using?
> 
> On 2/16/06, Aaron Smuts <as...@yahoo.com> 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
> 
=== message truncated ===


---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-users-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-users-help@jakarta.apache.org