Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的Java EHCache比Ubuntu上的慢_Java_Windows_Ubuntu_Ehcache - Fatal编程技术网

Windows上的Java EHCache比Ubuntu上的慢

Windows上的Java EHCache比Ubuntu上的慢,java,windows,ubuntu,ehcache,Java,Windows,Ubuntu,Ehcache,我在我的项目中使用了java上的EHCache 3.3.1,该项目在NetBeans IDE上运行。然而,我注意到一件奇怪的事情。当我在windows操作系统上运行相同的代码时,它比在ubuntu上运行时慢10倍,因此我做了以下测试: import java.io.File; import org.ehcache.CacheManager; import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.Cac

我在我的项目中使用了java上的EHCache 3.3.1,该项目在NetBeans IDE上运行。然而,我注意到一件奇怪的事情。当我在windows操作系统上运行相同的代码时,它比在ubuntu上运行时慢10倍,因此我做了以下测试:

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();
    }
}
导入java.io.File;
导入org.ehcache.CacheManager;
导入org.ehcache.config.builders.CacheManagerBuilder;
导入org.ehcache.Cache;
导入org.ehcache.config.builders.CacheConfigurationBuilder;
导入org.ehcache.config.builders.ResourcePoolsBuilder;
导入org.ehcache.config.units.MemoryUnit;
公共类缓存管理器{
私有静态CacheManager实例;
静止的{
instance=CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(System.getProperty(“user.dir”)+
File.separator+“CacheFiles”))
.构建(真实);
}
私有缓存管理器(){
}
公共静态CacheManager getInstance(){
返回实例;
}
}
公共类EHCacheTest{
私有静态CacheManager CacheManager=EHCacheManager.getInstance();
专用静态缓存缓存映射=
cacheManager.createCache(“HostInfoMap”,
CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class,
Integer.class,ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(500,MemoryUnit.MB)
.offheap(600,MemoryUnit.MB)
.disk(1,MemoryUnit.GB))
.build());
公共静态void main(字符串[]args){
System.err.println(“开始填充缓存…”);
对于(int i=0;i<100000;i++){
cacheMap.put(“数字”+i,i);
}
System.err.println(“已完成缓存填充…”);
System.err.flush();
}
}

奇怪的是,这段代码在ubuntu上运行大约1秒,而在windows上运行需要12秒以上。我在做一个项目,执行时间对我来说绝对重要。此外,我不能使用简单的地图,因为我需要在地图中存储大量数据。这种情况发生的具体原因是什么?还是我使用了错误的缓存设置?或者我应该使用不同的库将数据存储为地图吗?

答案在很大程度上取决于环境,因此很难给出答案。例如,您确定这不仅仅是一个将文件系统弄得一团糟的反病毒程序吗?你能在两个平台上执行期间定期转储线程,看看你是否注意到了差异吗?正如@LouisJacomet所说,我怀疑是反病毒。或者只是在Windows上使用速度较慢的磁盘。你应该在执行时运行一个探查器。我尝试在两台装有windows的电脑(一台装有防病毒软件,一台没有)和两台装有linux的电脑上运行这个程序,无论使用何种防病毒软件,结果都是一样的。