KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > shiftone > cache > test > benchmark > BenchmarkRunner


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 JavaDoc;
17
18 import java.util.HashMap JavaDoc;
19 import java.util.Hashtable JavaDoc;
20 import java.util.Random JavaDoc;
21
22
23 /**
24  * @version $Revision: 1.15 $
25  * @author <a HREF="mailto:jeff@shiftone.org">Jeff Drost</a>
26  */

27 public class BenchmarkRunner
28 {
29
30     private static final int TIMEOUT_MS = 60 * 60 * 1000; // 1 hour
31
private static final int MILLION = 1000000;
32     private static final int KEY_COUNT = MILLION;
33     private static final Object JavaDoc[] SEQUENCIAL_KEYS = new Object JavaDoc[KEY_COUNT];
34     private static final Object JavaDoc[] PSUDORANDOM_KEYS = new Object JavaDoc[KEY_COUNT];
35     private Benchmark[] benchmarks;
36     private Cache[] caches;
37
38     public BenchmarkRunner() throws Exception JavaDoc
39     {
40
41         Random JavaDoc random = new Random JavaDoc(0);
42
43         for (int i = 0; i < SEQUENCIAL_KEYS.length; i++)
44         {
45             SEQUENCIAL_KEYS[i] = new Integer JavaDoc(i);
46             PSUDORANDOM_KEYS[i] = new Integer JavaDoc(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, //
57
sequencialGet, sequencialGet, sequencialGet, //
58
randomGet, randomGet, randomGet, //
59
sequencialRemove, sequencialRemove, sequencialRemove
60         };
61         caches = new Cache[]
62         {
63             new MapCache(new HashMap JavaDoc(KEY_COUNT)), //
64
new MapCache(new Hashtable JavaDoc(KEY_COUNT)), //
65
new MapCache(new FIFOCache(KEY_COUNT)), //
66
new MapCache(new LRUCache(KEY_COUNT)), //
67
new SwarmCache(KEY_COUNT), //
68
new JcsCache(), //
69
new EHCacheCache("test"), //
70
new ZeroCacheFactory().newInstance("zero", TIMEOUT_MS, KEY_COUNT), //
71
new SingleCacheFactory().newInstance("single", TIMEOUT_MS, KEY_COUNT), //
72
new FifoCacheFactory().newInstance("fifo", TIMEOUT_MS, KEY_COUNT), //
73
new LruCacheFactory().newInstance("lru", TIMEOUT_MS, KEY_COUNT), //
74
new LfuCacheFactory().newInstance("lfu", TIMEOUT_MS, KEY_COUNT), //
75
OroCache.createFIFO(KEY_COUNT), //
76
OroCache.createFIFO2(KEY_COUNT), //
77
OroCache.createLRU(KEY_COUNT), //
78
OroCache.createRandom(KEY_COUNT) //
79
};
80     }
81
82
83     private final long now()
84     {
85         return System.currentTimeMillis();
86     }
87
88
89     public void run(PrintStream JavaDoc 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 JavaDoc tsv)
107     {
108
109         long start;
110
111         tsv.print(cache);
112         tsv.print('\t');
113
114         // -----------------------------------------
115
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     // new BenchmarkRunner(new MapCache(new LinkedHashMap())),
132
public static void main(String JavaDoc[] args) throws Exception JavaDoc
133     {
134
135         PrintStream JavaDoc tsv = System.out;
136         BenchmarkRunner runner = new BenchmarkRunner();
137
138         runner.run(tsv);
139     }
140 }
141
Popular Tags