import java.util.Random;
/**
* 要求这个类中的Durchgang1显示CACHE命中率只有1% 而Durchgang 2的命中率有99,9%.
*
*
*
* 这个类不能被改变.
*/
public class Worker {
public static void main(String[] args) {
int storagesize = 1000;
int cachesize = 10;
Storage storage = new Storage(storagesize);
System.out.println("Durchgang 1:");
testStrategy1(storage, cachesize, new StrategyLIFO(cachesize,
storagesize));
testStrategy1(storage, cachesize, new StrategyLFU(cachesize,
storagesize));
testStrategy1(storage, cachesize,
new StrategyFIFO(cachesize, storagesize));
testStrategy1(storage, cachesize, new StrategyLRU(cachesize,
storagesize));
System.out.println();
System.out.println("Durchgang 2:");
testStrategy2(storage, cachesize, new StrategyLIFO(cachesize,
storagesize));
testStrategy2(storage, cachesize, new StrategyLFU(cachesize,
storagesize));
testStrategy2(storage, cachesize,
new StrategyFIFO(cachesize, storagesize));
testStrategy2(storage, cachesize, new StrategyLRU(cachesize,
storagesize));
WorkerLFU.main(args);
}
private static void testStrategy1(Storage storage, int cachesize,
CacheStrategy cs) //这个方法是在STORAGE中随机抽取一个数值作为被请求的页面(数据)
{
Cache cache = new Cache(storage, cachesize, cs);
Random rng = new Random();
int max = storage.getSize();
for (int i = 0; i < storage.getSize() * 1000; i++) {
int index = rng.nextInt(max);
int[] data = cache.getElement(index);
if (data[0] != index) {
System.err.println("Falsche Daten erhalten.");
}
}
cache.printStats();
}
private static void testStrategy2(Storage storage, int cachesize, //这个方法是在STORAGE中按顺序抽取一个数值作为被请求的页面(数据)而且每个数值抽取1000次,也就是被访问1000次
CacheStrategy cs)
{
Cache cache = new Cache(storage, cachesize, cs);
for (int i = 0; i < storage.getSize() * 1000; i++) {
int index = i / 1000;
int[] data = cache.getElement(index);
if (data[0] != index) {
System.err.println("Falsche Daten erhalten.");
}
}
cache.printStats();
}
}