在我们的应用程序中将for循环更新为for-each循环时,我遇到了很多这样的“模式”:
for (int i = 0, n = a.length; i < n; i++) {
...
}
代替
for (int i = 0; i < a.length; i++) {
...
}
我可以看到你获得了集合的性能,因为你不需要在每个循环中调用size()方法。但是有了数组?
因此出现array.length
了一个问题:比常规变量贵吗?
否,呼叫array.lengthis O(1)
或固定时间操作。
由于.lengthis
(的行为类似于)的public final
成员array
,因此访问它的速度不会比局部变量慢。(这与对的方法的调用非常不同size()
)
.length
无论如何,现代的JIT编译器很可能会优化调用。
你可以通过查看OpenJDK中的JIT编译器的源代码,或通过使JVM转储JIT编译的本机代码并检查代码来确认这一点。
注意,在某些情况下,JIT编译器无法做到这一点;例如
问题内容: 有什么更好的: 代替这个: 当我输入try块时,JVM实际上会做什么? 编辑:我不想知道在第二个示例中总是要尝试…请回答问题。 问题答案: 在运行时明智地执行,只要没有例外,尝试不会花费您任何费用。只有在发生异常时才花费运行时间。在这种情况下,进行if评估要慢得多。 在JVM规范中,您看到执行路径上没有生成额外的字节码:http : //docs.oracle.com/javase/s
有多好:
问题内容: 我有一张有60列的桌子。其中的20个是“ NotEmpty”和6个“ NotNull”。 我有空值和空值(在我的情况下,它们始终表示“无数据”)。我想只用一种约束来统一列。 我已读取null值很便宜(以字节为单位)。那么也许使用NotEmpty约束?但是,也许NotNull约束的执行效果更好?或者在检索数据时最好同时拥有值和用途? 什么是成本的制约和Postgres里9.x中?您的经历
我想全面了解一个Docker容器的运行时性能成本。我发现网络的参考文献要慢大约100µs。 我还发现对运行时成本的引用“可以忽略不计”和“接近于零”,但我想更准确地了解这些成本是什么。理想情况下,我想知道Docker抽象的是什么,但需要付出性能代价,以及抽象出来的东西不需要付出性能代价。联网、CPU、内存等。 此外,如果存在抽象成本,是否有方法绕过抽象成本。例如,也许我可以直接挂载磁盘,而不是在D
问题内容: 我有一个循环,可以调用API并将结果编译成数组。我如何等待所有调用完成后才能恢复执行?我看到了一系列有关如何等到打完一个电话的答案,但我不知道如何检查所有这些。如果我做一个while循环,一直等到’obj’是正确的长度,则页面只会停顿直到调用完成,这不是我想要的。请帮助? 问题答案: 如果您使用jQuery的deferred,这很容易。有一种方法,等待多个诺言完成,然后运行回调。那就是
问题内容: 当我尝试研究内核的系统调用的返回值时,我会找到描述它们的表,以及需要放入不同的寄存器中才能使它们工作的表。但是,我找不到任何文档说明它从系统调用中获得的返回值是 什么 。我只是在不同的地方发现我收到的将在EAX寄存器中。 TutorialsPoint: 结果通常在EAX寄存器中返回。 汇编语言循序渐进:使用Linux编程 Jeff Duntemann的书在其程序中多次陈述: 查看EAX