声明一次并更新值比声明每次更新更快吗?
Is it faster to declare once and update value, instead of declare every update?
我想知道是否声明一个变量一次(在循环外)然后在循环的每次迭代中更改它的值,是否比在更新其值的同一行(在循环内)声明变量更快,然后在每次循环迭代时声明变量。
一方面,我什至不会牺牲 1 个 CPU 时钟,但另一方面,我希望我的代码尽可能短。
谢谢!
也许更好的问题是为什么需要这种优化?
如果您编写的程序非常小且功能如此之少,以至于需要这种级别的优化,那么 Java 不是适合使用的语言。 C或汇编之类的东西更适合。
即使在一个要求很高的游戏引擎中,我也不愿意浪费时间进行这样的微优化,除非它是一种每秒被调用 60 多次的方法,我可以通过测试来证明优化的重大影响.
在我会使用 Java 的情况下,这些优化不值得他们花时间打字。
就性能而言,这根本无关紧要,因此请选择对您来说更具可读性的选项。
为什么?编译代码时,会对其应用许多优化以将其翻译成机器代码。最后一个变量只是内存中的一个保留位置,因此假设您在循环内声明了该变量。在这种情况下,每次循环时计算机都必须 "reserve" 一个内存位置,因此您会在循环的每次迭代中浪费 CPU 时钟。但如前所述,许多静态优化都应用于代码,因此在编译代码时,内存预留将被移出循环。
在这里你可以找到一个更清晰的例子的解释:
http://en.wikipedia.org/wiki/Loop-invariant_code_motion
但基本上,现代编译器将优化几乎所有可通过静态代码分析检测到的内容。
我想知道是否声明一个变量一次(在循环外)然后在循环的每次迭代中更改它的值,是否比在更新其值的同一行(在循环内)声明变量更快,然后在每次循环迭代时声明变量。
一方面,我什至不会牺牲 1 个 CPU 时钟,但另一方面,我希望我的代码尽可能短。
谢谢!
也许更好的问题是为什么需要这种优化?
如果您编写的程序非常小且功能如此之少,以至于需要这种级别的优化,那么 Java 不是适合使用的语言。 C或汇编之类的东西更适合。
即使在一个要求很高的游戏引擎中,我也不愿意浪费时间进行这样的微优化,除非它是一种每秒被调用 60 多次的方法,我可以通过测试来证明优化的重大影响.
在我会使用 Java 的情况下,这些优化不值得他们花时间打字。
就性能而言,这根本无关紧要,因此请选择对您来说更具可读性的选项。
为什么?编译代码时,会对其应用许多优化以将其翻译成机器代码。最后一个变量只是内存中的一个保留位置,因此假设您在循环内声明了该变量。在这种情况下,每次循环时计算机都必须 "reserve" 一个内存位置,因此您会在循环的每次迭代中浪费 CPU 时钟。但如前所述,许多静态优化都应用于代码,因此在编译代码时,内存预留将被移出循环。
在这里你可以找到一个更清晰的例子的解释:
http://en.wikipedia.org/wiki/Loop-invariant_code_motion
但基本上,现代编译器将优化几乎所有可通过静态代码分析检测到的内容。