1 package org.shiftone.cache.test.benchmark; 2 3 4 5 import com.opensymphony.oscache.base.algorithm.FIFOCache; 6 import com.opensymphony.oscache.base.algorithm.LRUCache; 7 8 import org.shiftone.cache.Cache; 9 import org.shiftone.cache.adaptor.*; 10 import org.shiftone.cache.policy.fifo.FifoCacheFactory; 11 import org.shiftone.cache.policy.lfu.LfuCacheFactory; 12 import org.shiftone.cache.policy.lru.LruCacheFactory; 13 import org.shiftone.cache.policy.zero.ZeroCacheFactory; 14 import org.shiftone.cache.policy.single.SingleCacheFactory; 15 16 import java.io.PrintStream ; 17 18 import java.util.HashMap ; 19 import java.util.Hashtable ; 20 import java.util.Random ; 21 22 23 27 public class BenchmarkRunner 28 { 29 30 private static final int TIMEOUT_MS = 60 * 60 * 1000; private static final int MILLION = 1000000; 32 private static final int KEY_COUNT = MILLION; 33 private static final Object [] SEQUENCIAL_KEYS = new Object [KEY_COUNT]; 34 private static final Object [] PSUDORANDOM_KEYS = new Object [KEY_COUNT]; 35 private Benchmark[] benchmarks; 36 private Cache[] caches; 37 38 public BenchmarkRunner() throws Exception 39 { 40 41 Random random = new Random (0); 42 43 for (int i = 0; i < SEQUENCIAL_KEYS.length; i++) 44 { 45 SEQUENCIAL_KEYS[i] = new Integer (i); 46 PSUDORANDOM_KEYS[i] = new Integer (random.nextInt()); 47 } 48 49 Benchmark sequencialAdd = new AddBenchmark("S-Add", SEQUENCIAL_KEYS); 50 Benchmark randomGet = new GetBenchmark("R-Get", PSUDORANDOM_KEYS); 51 Benchmark sequencialGet = new GetBenchmark("S-Get", SEQUENCIAL_KEYS); 52 Benchmark sequencialRemove = new RemoveBenchmark("S-Rem", SEQUENCIAL_KEYS); 53 54 benchmarks = new Benchmark[] 55 { 56 sequencialAdd, sequencialAdd, sequencialAdd, sequencialGet, sequencialGet, sequencialGet, randomGet, randomGet, randomGet, sequencialRemove, sequencialRemove, sequencialRemove 60 }; 61 caches = new Cache[] 62 { 63 new MapCache(new HashMap (KEY_COUNT)), new MapCache(new Hashtable (KEY_COUNT)), new MapCache(new FIFOCache(KEY_COUNT)), new MapCache(new LRUCache(KEY_COUNT)), new SwarmCache(KEY_COUNT), new JcsCache(), new EHCacheCache("test"), new ZeroCacheFactory().newInstance("zero", TIMEOUT_MS, KEY_COUNT), new SingleCacheFactory().newInstance("single", TIMEOUT_MS, KEY_COUNT), new FifoCacheFactory().newInstance("fifo", TIMEOUT_MS, KEY_COUNT), new LruCacheFactory().newInstance("lru", TIMEOUT_MS, KEY_COUNT), new LfuCacheFactory().newInstance("lfu", TIMEOUT_MS, KEY_COUNT), OroCache.createFIFO(KEY_COUNT), OroCache.createFIFO2(KEY_COUNT), OroCache.createLRU(KEY_COUNT), OroCache.createRandom(KEY_COUNT) }; 80 } 81 82 83 private final long now() 84 { 85 return System.currentTimeMillis(); 86 } 87 88 89 public void run(PrintStream tsv) 90 { 91 92 for (int i = 0; i < benchmarks.length; i++) 93 { 94 tsv.print("\t" + benchmarks[i]); 95 } 96 97 tsv.println(); 98 99 for (int i = 0; i < caches.length; i++) 100 { 101 run(caches[i], tsv); 102 } 103 } 104 105 106 public void run(Cache cache, PrintStream tsv) 107 { 108 109 long start; 110 111 tsv.print(cache); 112 tsv.print('\t'); 113 114 for (int i = 0; i < benchmarks.length; i++) 116 { 117 start = now(); 118 119 benchmarks[i].run(cache); 120 tsv.print(now() - start); 121 tsv.print('\t'); 122 } 123 124 tsv.println(); 125 cache.clear(); 126 Runtime.getRuntime().gc(); 127 Runtime.getRuntime().runFinalization(); 128 } 129 130 131 public static void main(String [] args) throws Exception 133 { 134 135 PrintStream tsv = System.out; 136 BenchmarkRunner runner = new BenchmarkRunner(); 137 138 runner.run(tsv); 139 } 140 } 141 | Popular Tags |