我正在尝试配置Ehcache(2.5版),使其永远不会忘记项目。我正在以编程方式进行配置,但没有涉及任何配置XML文件。通过设置eternal
,true
我的理解是,只有在我磁盘空间不足或超过maxBytesLocalDisk
(或应用程序终止)的情况下,才可以从缓存中删除项目。但是,此测试程序未显示该行为:
public static void main(String[] args) {
CacheManager cacheManager = CacheManager.create();
Cache cache = new Cache(
new CacheConfiguration().name("test")
.overflowToDisk(true)
.eternal(true)
.maxBytesLocalHeap(1, MemoryUnit.MEGABYTES)
.overflowToOffHeap(false)
.maxBytesLocalDisk(100, MemoryUnit.GIGABYTES)
.maxElementsOnDisk(0)
.timeToIdleSeconds(0)
.timeToLiveSeconds(0)
.diskStorePath("E:\\Data\\Ehcache"));
cacheManager.addCache(cache);
for(int i = 0; i < 1000000; i++){
cache.put(new Element("key_" + i, "value_" + i));
}
System.out.println(cache.getSize());
}
因此,在将100万个元素添加到缓存后(我告诉它会溢出到足够大的数量级的磁盘上)之后,最后我只剩下3276个项目。这是怎么回事
当使用ARC或基于字节的缓存配置时,Ehcache会尝试保护您的OOME系统。像配置缓存一样,告诉ehcache您希望该缓存最多使用1
MB的堆。磁盘上的溢出告诉Ehcache,当堆填充到阈值时元素会溢出到磁盘上。现在,为此缓存设置的密钥仍将保留在堆上。而且,由于Ehcache仍在尝试保护您免受OOME的侵害,因此一旦密钥集无法再保存在内存中时,它将需要从磁盘上逐出。
我稍微更改了配置以使用10MB,我可以在缓存中获得32K条目。如果我将密钥更改为较小(仅Integer实例),则可以在缓存中获得46K条目。但基本上,您使用的此配置是限制性的,因为Ehcache将永远无法在磁盘上拥有那么多存储空间,而密钥却设置在堆上。希望这可以澄清一点。
如果您确实有一个用例,需要在磁盘上投入大量资源并最大程度地减少堆上存储,则可能需要查看http://ehcache.org/documentation/user-
guide/storage-options#enterprise-
diskstore
我的要求是有基于磁盘的缓存。如果缓存内存已满,我希望将LRU元素推送到磁盘。然后,如果磁盘上的文件已满,我希望驱逐磁盘上的LRU元素。这是一个非常简单的要求,但是我无法使用EhCache来实现。 我使用EhCache(2.10.1)进行以下配置: 我的期望是,当缓存被填满时(即缓存大小超过50M),我希望将LRU元素推送到文件中,从而为内存中的新元素创建一些空间。 然而,这不是EhCache的工作
我是Selenium IDE的新手,目前还没有通过第一个基础,测试中的应用程序在弹出窗口中打开一个登录窗口,输入用户名和密码,然后单击登录按钮,此时窗口关闭,应用程序显示在主浏览器窗口中,脚本显示为记录OK,但是在回放时,它失败了,出现了一个元素未找到错误,如果我使用目标查找按钮,字段被找到(突出显示的黄色),如果我执行命令,它将值写入字段,所以Selenium似乎知道它在那里。 我尝试了targ
问题内容: 我刚遇到一个很奇怪的东西。 为什么它会抬高而又改变内部? 问题答案: 正如我在评论中开始提到的那样,实际上是 在原地 修改列表,然后尝试将结果分配给元组中的第一个位置。从数据模型文档中: 调用这些方法以实现增强的算术分配(+ =,-=, =,/ =,// =,%=,* =,<< =,>> =,&=,^ =,| =)。这些方法应尝试就地进行操作(修改self)并返回结果(可以是,但不一定
我构建了一个深度学习模型,与VGG网略有相似。我正在使用带有Tensorflow后端的Keras。模型摘要如下: 我尝试了优化器(SGD,Adam等),损失(MSE,MAE等),批大小(32和64)的不同组合。我甚至尝试过从0.001到10000的学习率。但是,即使在 20 个 epoch 之后,无论我使用哪种损失函数,验证损失仍然完全相同。训练损失变化不大。我做错了什么? 我的网络应该训练做什么
问题内容: 如何设置会话超时,使其永不过期?它用于Java EE Web应用程序。 问题答案: 指定一个负时间。 然而,好处令人怀疑。Webapp将长期泄漏内存。在执行此操作之前,请三思。
我正在测试一个关闭窗口的按钮。然后当我单击按钮时,我需要检查窗口是否关闭。 我创建了这个方法: 但是它不起作用。硒在加载最后一步时停留了很长时间,最终显示了这个错误 命令:[8139ce6f8c35642a752d7fbedb186ec6,findElement{using=xpath,value=By.xpath:By.xpath:By.xpath:By.xpath:By.xpath:By.xp