问题标签 [lru]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1029 浏览

caching - Ehcache 和 Apache JCS - 这是如何工作的?

我需要 Lru 缓存来存储几个(~100)大对象(例如~10MB)。我阅读了 Ehcache 和 JSC 并有一个问题。我有一个案例:我在 ehcache 中存储了 10 个对象。然后我从他们那里得到一个并分配给参考。我的引用对象和缓存中的数据是否重复或指向 JVM 内存中的同一对象?

0 投票
3 回答
9177 浏览

scala - Scala中的LRUCache?

我知道 Guava 有一个优秀的缓存库,但我正在寻找一些更 Scala/功能友好的东西,我可以在其中执行类似cache.getOrElse(query, { /* expensive operation */}). 我还查看了Scalaz 的备忘录,但没有 lru 到期。

0 投票
1 回答
451 浏览

android - Memory-Leaks Image-Gallery Android - 其他应用程序如何处理它?

我正在尝试实现一个图像库,它应该显示〜 5-15 个较小的图像和一个“当前选择的”更大的图像。

它看起来像:http ://www.mobisoftinfotech.com/blog/wp-content/uploads/2012/06/galleryDemo.png

我查了很多资源,现在决定使用位图缓存(lru-cache)(感谢这个论坛的人!)。

我目前没有内存泄漏,但我对这个解决方案不满意,因为每次滚动时,都会从缓存中删除一些图像,我必须重新加载它们......所以用户必须等待重新加载图像......每次滚动到另一边时等待 0.5 - 1 秒真的很烦人......

我是否有可能在获取图像时出错?目前,我将为单选图像使用 320x480 分辨率,为底部列表使用 64x64 分辨率...

真的很奇怪,不管图像的分辨率有多大,lru-cache 仍然会删除一些图像,即使我只选择 64x64 图像......我可能做错了什么lru缓存?

以下代码显示了我的实现:

和类位图缓存:

非常感谢你 :(

更多代码:BitmapWorkerTask:

0 投票
2 回答
230 浏览

java - 在多线程环境中使用缓存映射是否安全?

我正在使用 Commons Collections LRUMap(它基本上是一个经过少量修改的 LinkedHashMap)为用户的照片实现 LRU 缓存。findPhoto 方法可以在几秒钟内被调用数百次。

用法:

如您所见,我没有使用同步块。我假设这里最坏的情况是竞争条件导致两个线程为同一个 userId 运行 cache.put(userId, photo)。但是两个线程的数据是相同的,所以这不是问题。

我的推理在这里正确吗?如果没有,有没有办法使用同步块而不会对性能造成很大影响?一次只有 1 个线程访问地图感觉有点矫枉过正。

0 投票
3 回答
14111 浏览

python - 每个实例的 Python LRU 缓存装饰器

使用此处找到的 LRU 缓存装饰器:http: //code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/

我可以用它创建一个装饰类方法,但它最终会创建一个全局缓存,适用于类 Test 的所有实例。但是,我的意图是为每个实例创建一个缓存。因此,如果我要实例化 3 个测试,我将拥有 3 个 LRU 缓存,而不是所有 3 个实例的 1 个 LRU 缓存。

我知道这种情况发生的唯一迹象是,当在不同的类实例修饰方法上调用 cache_info() 时,它们都返回相同的缓存统计信息(鉴于它们正在与非常不同的参数进行交互,这种情况极不可能发生):

是否有一个装饰器或技巧可以让我轻松地让这个装饰器为每个类实例创建一个缓存?

0 投票
3 回答
348 浏览

java - Java中的LRU算法

我目前有一个自定义类的数组,如下所示:

在我的Phy课堂上,我有以下功能:

  • 获取时间戳(返回时间戳)
  • 更新时间戳(使用系统时间,获取自 1970 年以来的毫秒并设置它)

当涉及到 LRU 部分来查找 LRU 类时,我会这样做:

这基本上是寻找最旧的时间戳。

我刚刚意识到的问题是,处理器可以在 MS 中执行许多这些操作,而留下无用的算法。

我该怎么做才能对此进行排序?

0 投票
1 回答
2316 浏览

java - LRU 和 MRU 缓存驱逐策略的排序键数据结构

我正在研究一个简单的数据结构,它将实现缓存驱逐策略。我想实现的两种可能的场景是LRU 和 MRU

我正在寻找一种类似地图的数据结构,其中键可能是时间(或者可能只是自动递增的整数),以了解最近使用或最近使用最少的缓存块。值是块的 ID。

是否存在现有的数据结构,可以通过插入键对数据进行排序,并在 O(1) 时间内检索某个键的值?

例如,Java 的 HashMap 具有恒定时间查找,但我需要获取所有键,对它们进行排序并根据我正在实现的算法选择最后一个或第一个。SortedMap是我应该去的吗?您是否建议任何其他适用于 LRU 和 MRU 实现的数据结构?

谢谢

0 投票
3 回答
1019 浏览

c++ - 更好地理解 LRU 算法

我需要在 3D 渲染器中实现 LRU 算法以进行纹理缓存。我在 Linux 上用 C++ 编写代码。

  • 在我的例子中,我将使用纹理缓存来存储图像数据的“图块”(16x16 像素块)。现在想象一下,我在缓存中进行查找,得到一个命中(图块在缓存中)。如何将该条目的“缓存”内容返回给函数调用者?我解释。我想当我在缓存中加载一个图块时,我分配内存来存储 16x16 像素,然后加载该图块的图像数据。现在有两种解决方案将缓存条目的内容传递给函数调用者:
    1)作为指向切片数据的指针(快速,内存高效),

    2)或者我需要在函数调用者分配的内存空间内从缓存中重新复制切片数据(复制可能很慢)。

    我会选择 1),但问题是,如果在查找之后将切片从缓存中删除,并且该函数尝试使用返回指针访问数据,会发生什么情况?我看到的唯一解决方案是使用一种引用计数(auto_ptr)的形式,其中数据实际上仅在不再使用时才被删除?

  • 应用程序可能会访问超过 1 个纹理。我似乎找不到一种方法来创建每个纹理和纹理的每个图块都是唯一的密钥。例如,我可能在缓存中有来自 file1 的 tile 1 和来自 file2 的 tile1,因此在 tildId=1 上进行搜索是不够的......但我似乎无法找到一种方法来创建该文件的密钥名称和 tileID。我可以构建一个包含文件名和 tileID (FILENAME_TILEID) 的字符串,但用作键的字符串不会比整数慢得多吗?

  • 最后我有一个关于时间戳的问题。许多论文建议使用时间戳来对缓存中的条目进行排序。使用时间戳有什么好的功能?时间()函数,时钟()?有没有比使用时间戳更好的方法?

抱歉,我意识到这是一条很长的消息,但是 LRU 的实现似乎并不像听起来那么简单。

0 投票
3 回答
2676 浏览

c++ - LRU 缓存和多线程

前段时间我已经发了一个帖子,询问关于 LRU 缓存(在 C++ 中)的良好设计。您可以在那里找到问题、答案和一些代码:

更好地理解 LRU 算法

我现在尝试对这段代码进行多线程处理(使用 pthread)并得到了一些非常出乎意料的结果。在尝试使用锁定之前,我已经创建了一个系统,其中每个线程都访问自己的缓存(参见代码)。我在 4 核处理器上运行此代码。我尝试用 1 个线程和 4 个线程运行它。当它在 1 个线程上运行时,我在缓存中执行 100 万次查找,在 4 个线程上,每个线程执行 250K 查找。我期望用 4 个线程来减少时间,但结果恰恰相反。1个线程运行2.2秒,4个线程运行超过6秒??我只是无法理解这个结果。

我的代码有问题吗?这可以以某种方式解释(线程管理需要时间)。如果能得到专家的反馈,那就太好了。非常感谢 -

我编译这段代码: c++ -o cache cache.cpp -std=c++0x -O3 -lpthread

0 投票
5 回答
8617 浏览

java - 实现 LRU 缓存的最佳方法

我想创建一个有效的 LRU 缓存实现。我发现最方便的方法是使用LinkedHashMap,但不幸的是,如果许多线程都在使用缓存,它会很慢。我的实现在这里:

如果我们有很多线程试图调用 let sayget()方法,这个实现会很慢(因为同步)。有没有更好的办法?