问题:这更多是出于好奇心而不是其他任何事情.如果我有一个Java if / else语句,并且我知道’if / else’语句的一个分支将比另一个分支更频繁地使用,那么我订购这两个分支的方式是否提供了一个提示JIT编译器可以带来更好的性能吗?

背景:

在我简单的计算机体系结构视图中,“if / else”语句被转换为一个条件跳转指令,后跟在没有执行跳转时应该执行的指令.内存中的其他位置将是跳转所针对的代码.据我了解,CPU会按顺序加载指令(我确定我在这里忽略了分支预测器),并且非跳转路径有更高的机会被加载到指令缓存和CPU中指令管道.

问题重述:if / else语句的分支的合理排序是否会增加经常执行的代码紧跟条件跳转指令的可能性,这将使代码对缓存和管道更友好?

现实:听到JIT编译器是如此复杂的软件,在完成所有指令重新排序,寄存器分配和其他簿记后,我不会感到惊讶,它无法做出这样的保证.

我的大多数’if / else’语句都会被取消执行,所以我不会到处都这样做.此外,很多时候我会猜错哪个分支将更频繁地执行并最终实际上损害性能.

我想这样一个简单的事情,如故意用分支排序不会被认为是过早的优化,但如果是,我只会弄乱订单,如果一个分析器告诉我代码很慢.

谢谢!

解决方法:

没有.

你不能.你不需要.

它对编译器有一定意义,因为它可以翻译

if (improbable) {

doSomething();

} else {

doSomethingElse();

}

doMoreThings();

return;

进入(伪代码)

if (improbable) goto away

doSomething()

back: doMoreThings()

return

away: doSomethingElse()

goto back

这样就可以简化更可能的路径. AOT编译器可以依赖提供的信息.

你不需要.但是收集统计信息之后,Java JIT编译器就会这样做.在这里,javac是无关紧要的,因为字节码被解释器执行了几次,这很慢,但对于很少执行的部分和足以收集统计信息的部分来说已经足够了.通常,这些统计数据优于程序员可能提供的数据,但更重要的是:它们会针对每个与时间相关的代码进行收集.它实际上更复杂,因为那里有C1和C2编译器……

你不能.在字节码中没有标准化的表达方式.此外,优化器会在内部表示中转换代码,这些细节会丢失.

过早优化忘了它.编译器可以很好地完成更复杂的事情.一些低级优化仍然有意义,但仅限于非常极端的情况.如果需要,可以使用干净的代码并进行一些高级优化.

标签:java,cpu-architecture,performance

来源: https://codeday.me/bug/20190628/1310635.html

java中if结构用图表示_Java if语句结构和指令流水线相关推荐

  1. java中for break的用法_java break语句的使用方法

    在switch语中,break语句用来终止switch语句的执行.使程序 switch语句后的第一个语句 开始执行. 在Java中,可以为每个代码块加一个括号,一个代码块通常 用大括号{}括起来的一段 ...

  2. java 中括号中的语句,Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作()。...

    Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作(). 更多相关问题 下列哪项措施不能提高砌体受压构件的承载力()? 商业银行办理个人储蓄存款业务,应当遵循地原则( ...

  3. java中if结构用图表示_Java语法基础之选择结构的if语句、switch语句详解

    [前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...

  4. java中if结构用图表示_Java语法 | if选择结构 | 创作者训练营

    前言 C: 上一篇我们介绍了流程控制语句的概念,本篇我们要正式开始学习其中的选择控制语句.那么在 Java 中,如果要实现选择控制语句有哪些语法呢? 本篇我们就来看看其中,在以后用的最多的一种选择结构 ...

  5. java中检查性异常类_Java异常处理、java语言推崇使用检查类型异常

    异常处理是java语言的重要特性之一,<Three Rules for effective Exception Handling>一文中是这么解释的:它主要帮助我们在debug的过程中解决 ...

  6. java中的关键字有哪些_java关键字复习

    java关键字复习 Java的主要工作是通过编程语言来制作互联网页面.制作动态效果以及网站等技术,以下是小编为大家搜索整理的java关键字复习, 希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕 ...

  7. 在java中班级的表示方法_Java基础班学习笔记(8)

    1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.java 如何 ...

  8. java中date类型如何赋值_Java 中的类型传递问题解惑

    点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 来源: https://blog.biezhi.me/2018/11/java-pass-by-value.html 我之 ...

  9. java中怎么编写围棋对弈_java课程设计围棋对弈(含代码).doc

    java课程设计围棋对弈(含代码).doc C:\ProgramFiles\Java\jdk1.8.0_45Java程序课程设计任务书1.主要任务与目标创建一个围棋对弈平台.基于Panel类定义一个面 ...

最新文章

  1. vagrant box php开发环境配置--centos 7 安装 php7
  2. js svg语音波动动画_11 个非常受欢迎的 JavaScript 动画库,值得学习!
  3. hibernate clob mysql_Hibernate操作Clob类型数据
  4. 计算机网络技术之城域网与三网融合技术
  5. speech开源框架_微软SAPI(The Microsoft Speech API):让你的软件能说会道
  6. 微软云中国策略的下一步:驱动AI生态
  7. 免费不加密:C++基础教程完整版视频(黑马程序员)
  8. 《乔布斯传》阅读笔记
  9. 制作HTML邮件邮箱注意问题和解决方案--兼容手机邮箱、电脑邮箱和邮件客户端
  10. 配置Windows自带无线wifi热点
  11. 我们的青春已落幕,用 Python 分析韦德职业生涯数据
  12. Linux修改/设置服务器ip地址
  13. Linux内核同步原语之原子操作(Atomic)
  14. Unity lua os.time超过2038年1月19日3时14分07秒会出问题的解决办法(新千年虫问题、C#时间)
  15. 开发润乾报表过程:因为内容过多分页导致的这条线
  16. java data mining_“JDM”是“Java Data Mining”的缩写,意思是“Java数据挖掘”
  17. 微信小程序云开发—数据库增删改查
  18. c语言指数部分尾数部分,C语言中 float double在内存中的存储
  19. jQuery在IE8上使用,IE8提示“对象不支持此属性或方法”
  20. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

热门文章

  1. 剑指offer(C++)-JZ23:链表中环的入口结点(数据结构-链表)
  2. 华为机试HJ35:蛇形矩阵
  3. mysql性能优化 洪斌_洪斌 - MySQL性能诊断与实践
  4. quill鼠标悬浮 出现提示_html实现鼠标悬停显示气泡文字内容
  5. 微信分身版电脑版_电脑版营销wetool电脑版-网站
  6. php医院数据库设计,检查我的数据库设计/ PHP / MySQL
  7. linux 格式化 lvm2,LVM2
  8. java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
  9. 人名和成绩一起排序_excel中怎么让人名和他的成绩一起排序
  10. 简述python的优点_Python是什么及Python的优点和缺点