Java对象数组 - 使用硬件内存缓存

时间:2016-06-30 08:44:51

标签: java arrays memory-management linked-list cpu-cache

通常认为迭代数组的连续元素比因缓存而迭代连续的链表元素更有效。

只要元素具有基本数据类型,这无疑是正确的。但是如果元素是对象,我的理解是只有对象的引用将存储在数组的连续内存区域(可能被缓存),而实际的对象数据将存储在主内存中的任何位置,而不能有效缓存。

由于您通常不仅迭代容器而且还需要在每次迭代中访问对象数据,这是否或多或少会破坏列表中列表的性能优势?

编辑:关于不同场景变化的评论可能是正确的。因此,让我们考虑一个特定的:您在容器中搜索特定对象。为了找到它,你需要将给定的字符串与另一个字符串进行比较,该字符串是对象的类变量。

1 个答案:

答案 0 :(得分:1)

不,对于对象(“指针”),两者都有间接。链接列表需要每个节点都步进到下一个节点。所以它仍然有开销。

但是,是的,以相对的方式,增益仅涉及一部分,非常大约是纯粹步行的一半,计算间接步骤。

当然,每次间接都会使访问变得更混乱,更慢。

顺便说一下,ArrayList也和数组一样快。