gpt4 book ai didi

java - 为什么 "this.var"比 "array.length"效率低?

转载 作者:行者123 更新时间:2023-11-30 09:53:02 24 4
gpt4 key购买 nike

当我观看“Dalvik VM Internals”演讲时,我对其中一张关于明智循环的幻灯片有疑问。这是该幻灯片上七个循环中的两个:

(4) for (int i = 0; i < array.length; i++)

(5) for (int i = 0; i < this.var; i++)

而且据说 (4) 比 (5) 更有效。 “数组”只是一个数组对象。

我的问题是,“this.var”到底做了什么使得它比从对象中检索成员变量更昂贵?

最佳答案

我认为您需要重新检查实际所说的内容。幻灯片 54 似乎在谈论 (2) 和 (3),并暗示它们比所有其他的都好。 (我无法收听音频流来检查实际所说的内容......)

我没想到,在 (4) 中,如果 array 局部变量没有在循环体中赋值,那么 array.length 可以从内存中读取一次并在循环持续时间内保存在寄存器中。 (数组的长度永远不会改变......我假设 array 是局部的而不是 this 的字段。)

相比之下,在 (5) 中,this.var 可能会在循环运行时被另一个线程更改,因此(取决于 Davlik 如何实现 Java 内存模型)它可能需要每次循环都重新获取。

但这取决于 Davlik 如何处理。 Java 语言规范不要求重新获取实现,除非this.var 被声明为volatile。但它是否确实是一个可能(大概)改变的实现细节。

关于java - 为什么 "this.var"比 "array.length"效率低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com