Java EHCache på Windows langsommere end på Ubuntu

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger EHCache 3.3.1 på java i mit projekt, der køres på NetBeans IDE. Jeg bemærkede dog en mærkelig ting. Når jeg kører den samme kode på Windows-operativsystemet, er det 10 gange langsommere, end når jeg kører det på ubuntu, så jeg lavede følgende test:


import java.io.File;
import org.ehcache.CacheManager;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.Cache;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.units.MemoryUnit;
public class EHCacheManager {
    private static CacheManager instance;
    static{
                instance = CacheManagerBuilder.newCacheManagerBuilder()
                  .with(CacheManagerBuilder.persistence(System.getProperty("user.dir") +
                    File.separator + "CacheFiles"))
                    .build(true);
    }
    private EHCacheManager(){
    }
    public static CacheManager getInstance(){
        return instance;
    }
}
public class EHCacheTest {
    private static CacheManager cacheManager = EHCacheManager.getInstance();
    private static Cache<String, Integer> cacheMap =    
                cacheManager.createCache("HostInfoMap", 
                CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class,
                Integer.class,ResourcePoolsBuilder.newResourcePoolsBuilder()
                .heap(500, MemoryUnit.MB)
                .offheap(600, MemoryUnit.MB)
                .disk(1, MemoryUnit.GB))
                .build());
    public static void main(String[] args) {
        System.err.println("Starting fill the cache..");
        for(int i = 0; i < 100000; i++){
            cacheMap.put("number" + i, i);
        }
        System.err.println("Finished fill the cache..");
        System.err.flush();
    }
}


Det mærkelige er, at denne kode kører i ca. 1 sekund på ubuntu, mens det tager mere end 12 sekunder at køre på vinduer. Jeg arbejder på et projekt, hvor eksekveringstiden er absolut vigtig for mig. Jeg kan heller ikke bruge et simpelt kort, fordi jeg skal gemme store mængder data i mit kort. Er der en særlig grund til, at dette sker? Eller brugte jeg en forkert opsætning til min cache? Eller skal jeg bruge et andet bibliotek til at gemme mine data som et kort?

Bedste reference