在Java中,以下哪段代码更快?

在Java中,以下哪段代码更快?,第1张

在Java中,以下哪段代码更快?

当您降至最低级别(机器代码,但我将使用汇编语言,因为它主要是一对一映射)时,空循环递减为0和一个递减为50(例如)之间的差异通常沿着的行:

      ld  a,50     ld  a,0loop: dec a  loop: inc a      jnz loop     cmp a,50        jnz loop

这是因为大多数零碎CPU中的零标志在达到零时由减量指令设置。当增量指令达到50时,通常不能说相同(因为该值没有什么特别之处,不像零)。因此,您需要将寄存器与50进行比较以设置零标志。


但是,请问两个循环中的哪个:

for(int i = 100000; i > 0; i--) {}for(int i = 1; i < 100001; i++) {}

更快(几乎在 任何 环境下,Java或其他情况下)都没有用,因为它们都不起作用。这两个循环的 最快
版本根本没有循环。我向任何人发起挑战,要求他们提供比这更快的版本:-)

仅当您开始在牙套内进行一些有用的工作时,它们才会变得有用,并且此时, 工作 将决定您应使用哪个顺序。

例如,如果您 需要
从1到100,000进行计数,则应使用第二个循环。这是因为递减计数(如果有的话)的优势可能会因

100000-i
每次使用循环时都必须在循环内进行评估而被淹没。用汇编术语来说,这将是以下两者之间的区别:

     ld  b,100000  dsw a     sub b,a     dsw b

dsw
当然是臭名昭著的
do something with
汇编器助记符)。

由于您每次迭代只会将一次命中用于递增循环,并且每次迭代将 至少 一次将其用于减法(假设您将使用

i
,否则根本不需要循环) ),则应使用更自然的版本。

如果您需要数数,请数数。如果您需要倒数,请倒数。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5564929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存