Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Java jbosscache和Ehcache的性能_Java_Performance_Ehcache_Jboss Cache - Fatal编程技术网

Java jbosscache和Ehcache的性能

Java jbosscache和Ehcache的性能,java,performance,ehcache,jboss-cache,Java,Performance,Ehcache,Jboss Cache,我正在考虑使用JBoss缓存或Ehcache来实现缓存。在看过这两个API之后,我有一种直觉,JBoss可能比Ehcache的内存效率高一点,因为它可以将原始对象放入缓存中,而Ehcache需要将数据包装到元素对象中 我设置了一个快速工作台,在缓存中反复插入键、值元组。键和值类非常简单: 关键: 价值: public class Value implements Serializable{ /** * serialVersionUID */ private

我正在考虑使用JBoss缓存或Ehcache来实现缓存。在看过这两个API之后,我有一种直觉,JBoss可能比Ehcache的内存效率高一点,因为它可以将原始对象放入缓存中,而Ehcache需要将数据包装到
元素
对象中

我设置了一个快速工作台,在缓存中反复插入键、值元组。键和值类非常简单:

关键:

价值:

public class Value implements Serializable{

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -499278480347842883L;
}
当在内存中插入100000个对象时,结果与我预期的完全一致,Ehcache使用13396字节来存储对象,而JBoss使用5712字节来进行相同的操作(这很好,因为使用
ConcurrentHashMap
的相同测试使用了5680字节)

然而,当我查看执行时间时,我有一个非常糟糕的惊喜:Ehcache花了300毫秒来执行我的测试,而JBossCache花了44秒来执行同样的测试。我敢肯定,我的JBoss配置中有一些不好的东西解释了这种差异

Ehcache以编程方式初始化,如下所示:

CacheConfiguration cacheConfiguration = new CacheConfiguration("MyCache", 0).diskPersistent(false).eternal(true)                
    .diskExpiryThreadIntervalSeconds(100000).transactionalMode(TransactionalMode.OFF);
final Configuration config = new Configuration();
config.setDefaultCacheConfiguration(cacheConfiguration);
this.cacheManager = new CacheManager(config);
cacheConfiguration.name("primaryCache");
this.cache = new net.sf.ehcache.Cache(cacheConfiguration);
this.cacheManager.addCache(this.cache);
JBoss缓存是使用Spring创建的,具有以下bean配置:

<bean id="cache" class="org.jboss.cache.Cache" factory-bean="cacheFactory" factory-method="createCache">
    <constructor-arg>
        <value type="java.io.InputStream">/META-INF/jbossCacheSimpleConf.xml</value>
    </constructor-arg>
</bean>
为确保完整性,Ehcache测试为:

for (int i = 0; i < ITEM_COUNT; i++) {
    this.cache.put(new Element(new Key(i), new Value()));
}
for(int i=0;i
而JBoss one是:

for (int i = 0; i < ITEM_COUNT; i++) {
    this.processNode.put(new Key(i), new Value());
}
for(int i=0;i

我的设置/基准测试有什么问题吗?

请注意默认的JBossCache配置。
默认情况下,JBossCache可能会尝试在从属节点上查找和复制数据。

我切换到了,并且没有任何奇怪的性能问题。

出于这些性能原因,我们实际上正在从Ehcache迁移,看起来您已经设置了准确的基准。您正在从Ehcache迁移到JBossCache?我的工作台显示了相反的情况,JBoss几乎比Ehcache慢150秒(44秒vs 300毫秒)。你能通过探查器(甚至只是JVisualVM)运行测试来了解时间从何而来吗?我在上面运行了JProfiler,看起来JBosscache正在无数次地克隆一些内部哈希映射。很好。Infinispan是JBoss缓存的一种演变。JBoss缓存已弃用/报废,多年未维护。所有的努力和精力都投入了英菲尼斯潘。请参阅Infinispan,特别是关于JBoss缓存和Infinispan的部分。
for (int i = 0; i < ITEM_COUNT; i++) {
    this.cache.put(new Element(new Key(i), new Value()));
}
for (int i = 0; i < ITEM_COUNT; i++) {
    this.processNode.put(new Key(i), new Value());
}