当前位置: 首页 > 面试题库 >

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

宗政小林
2023-03-14
问题内容

一个) for(int i = 100000; i > 0; i--) {}

b) for(int i = 1; i < 100001; i++) {}

答案在此网站上(问题3)。我只是不知道
为什么? 从网站:

3.一个


问题答案:

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

      ld  a,50                ld  a,0
loop: 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,否则根本不需要循环) ),则应使用更自然的版本。

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



 类似资料:
  • 问题内容: 我需要在Linux环境( Ubuntu 11.04 )下以Java代码播放MP3文件。 我试图从http://www.oracle.com/technetwork/java/javase/download-137625.html下载 MP3plugin.jar 文件,但在列表中看不到它。 注意:“我下载了sun Java Media Framework” 问题答案: 那是前一段时间我从

  • 问题内容: 我想看看Java API中的方法是做什么的。所以我想要JDK源代码。在重新安装Linux之前,我先安装了包含所有正式源代码的软件包。我只需要告诉Eclipse这个文件在哪里,就可以看到代码。但是现在我没有文件了… 所以问题是:在哪里可以找到它? 问题答案: 你尚未说出所需的版本, JDK 8源代码的存档以及JDK 7和JDK 6。 此外,你可以浏览或克隆的Mercurial库:8,7,

  • Java: 如果java以微弱优势击败了C和C#我不会感到惊讶,但速度快了20倍?! 文件的格式如下: 另外,我认为值得注意的是,java在NetBeans中运行时大约需要11秒(即使是在“运行”模式下,而不是在“调试”模式下)。 我也尝试编译为C++而不是C,但没有什么不同。 我对C和C#都使用VS2015。 Java: 好吧,我按照建议重新做了测试: 首先,我在C和C#中都使用了类/struc

  • 问题内容: 我试图在glibc源代码中找到select()源代码(Linux,i386架构),但我找不到任何东西(与所述体系结构有关) 谁能指出我的select()源代码? 问题答案: select()不是libc的函数,而是内核函数,因此您需要查看内核源代码。 您可以通过查看手册页来说明这一点:如果在第2节中,则为内核函数;如果在第3节中,则为标准C库的函数,在您的情况下为glibc。 编辑:像

  • 我正在用下面的代码将数据从mysql加载到Ignite缓存中。代码以客户端模式Ignite运行,并将数据加载到Ignite集群中。 > 代码的哪些部分将在服务器端运行? 将数据加载到缓存中的工作机制看起来像map-reduce,那么,哪些任务被发送到服务器?SQL? 我想特别问一下:下面的代码是在客户端运行还是在服务器SDIE运行? 下面是将数据加载到缓存中的完整代码

  • 问题内容: 假设我对一种特定Linux实用程序(如)的源感兴趣。在哪里可以找到该实用程序的源代码? 问题答案: 我所做的是打字 然后走到最底下,找到“ GNU coreutils 6.10”。所以我用Google搜索了’coreutils’,然后…发现了刚刚链接到的网站joschi。