gpt4 book ai didi

java - 什么是堆写入流量以及为什么在 ArrayList 中需要它?

转载 作者:行者123 更新时间:2023-12-03 19:34:44 24 4
gpt4 key购买 nike

我只是想知道 heap write traffic 是什么意思ArrayList 的实现方式和原因?

ArrayList 实现的片段,见注释行

@Override
@SuppressWarnings("unchecked")
public void forEachRemaining(Consumer<? super E> consumer) {
Objects.requireNonNull(consumer);
final int size = ArrayList.this.size;
int i = cursor;
if (i >= size) {
return;
}
final Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length) {
throw new ConcurrentModificationException();
}
while (i != size && modCount == expectedModCount) {
consumer.accept((E) elementData[i++]);
}
// update once at end of iteration to reduce heap write traffic
cursor = i;
lastRet = i - 1;
checkForComodification();
}

最佳答案

可能是作者想使用局部变量 i,因为它可能在 escape analysis and stack allocation 时被堆栈分配。与 cursor 不同,i 变量由于 while 循环内的 i++ 语句而多次更改。在堆栈上增加它并跳过所有 Java 内存模型的影响应该更便宜。 Iterator.cursor 是一个成员字段,它可能总是在堆上,尤其是 Iterator 对象在用户代码中传递。

关于java - 什么是堆写入流量以及为什么在 ArrayList 中需要它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075220/

24 4 0