首页 / JAVA / Java最终性能/优化
Java最终性能/优化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java最终性能/优化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2029字,纯文字阅读大概需要3分钟。
内容图文
![Java最终性能/优化](/upload/InfoBanner/zyjiaocheng/796/5d5117545f994edfb4f72fb555d28068.jpg)
所以我在不同的数据结构上运行了一些基准测试并注意到,当我声明我的变量最终时,我的性能提升了10-20%.
这真让我感到惊讶.我认为final关键字纯粹用于限制变量的变化,优化会判断某个变量是否具有常量值.
这是一个例子:
import javafx.scene.input.KeyCode;
import java.util.*;
public class Main {
static /*final*/ int LOOPS = Integer.MAX_VALUE / 100;
static /*final*/ KeyCode[] keyCodes = KeyCode.values();
public static void main(String[] args) {
long startTime;
long endTime;
testEnumSet(); //warmup
startTime = System.nanoTime();
testEnumSet();
endTime = System.nanoTime();
System.out.println(" EnumSet: " + (endTime - startTime) + "ns");
}
static /*final*/ EnumSet<KeyCode> enumSet = EnumSet.noneOf(KeyCode.class);
static void testEnumSet() {
for (int i = 0; i < LOOPS; i++) {
/*final*/ KeyCode add = getRandomKeyCode();
if(!enumSet.contains(add)) enumSet.add(add);
/*final*/ KeyCode remove = getRandomKeyCode();
if(enumSet.contains(remove)) enumSet.remove(remove);
}
}
/*final*/ static Random random = new Random();
static KeyCode getRandomKeyCode() {
return keyCodes[random.nextInt(keyCodes.length)];
}
}
最后:…… EnumSet:652 266 207ns
没有最终:EnumSet:802 121 596ns
这是一贯可重复的!
为什么使用final的代码与不使用final的代码之间存在如此巨大的差异?为什么不进行优化?为什么最终速度更快,生成的字节码有什么不同?
解决方法:
如果某些东西永远不会改变,你可以进行各种优化,例如实际值的内嵌,而不是一遍又一遍地查找.这只是你可以做的一件容易解释并带来最大好处的事情.
还有许多其他更为深奥的事情发生的影响要小得多.
如果你查看字节码,你会看到这一点,特别是在JIT启动之后.
使整个班级最终可以有类似的好处.
That said,
final
references will not always provide measurable
gains, it depends on the usage of the reference. In this case
EnumSet
does a lot of special sauce stuff under the hood if you look
at the source. Immutable references probably get inlined as part of
that.
另请注意,您看到的行为可能会在将来的JVM版本中消失,或者在其他JVM实现中不会出现.任何事情都可能会发生变化,因此不要依赖任何特定的实施.
Here is some more information in greater detail about all the idiomatic uses of final.
内容总结
以上是互联网集市为您收集整理的Java最终性能/优化全部内容,希望文章能够帮你解决Java最终性能/优化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。