栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java:JVM将如何优化对void函数的调用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java:JVM将如何优化对void函数的调用?

Java编译器将去掉语句

a
b

javac
(源到字节码)编译器不会破坏任何呼叫。(通过检查字节码很容易检查这一点;例如,查看
javap -c
输出。)

在这两种情况下(剥离还是不剥离),Java编译器决定背后的原理是什么?

符合JLS :-)。

从务实的角度:

  • 如果
    javac
    编译器优化了这些调用,则Java调试器将根本看不到它们,这对于开发人员来说会造成混乱。
  • javac
    如果
    Message
    类和主类是独立编译/修改的,则早期优化(by )将导致破坏。例如,考虑以下顺序:

    • Message
      被编译,
    • 主类被编译,
    • Message
      进行了编辑,以便
      log
      执行某些操作并重新编译。

现在我们有一个不正确编译主类,没有做的事情,在

a
b
由于过早内联代码是过时。


但是,JIT编译器 可能 以多种方式 在运行时 优化代码。例如:

  • 该方法要求在

    a
    b
    可被内联如果JIT编译器可以推断出没有虚拟方法调度是必需的。(If
    Logger
    是应用程序使用的唯一实现该类的类,
    ILogger
    对于优质的JIT编译器而言,这是不言而喻的。)

  • 内联第一个方法调用后,JIT编译器可以确定主体为noop并优化调用。

  • 在第二个方法调用的情况下,JIT编译器可以进一步(通过转义分析)推断出

    Message
    不需要在堆上分配对象,或者根本不需要分配对象。

(如果您想知道(您的平台上的)JIT编译器的 实际 作用,Hotspot JVM具有一个JVM选项,该选项会为选定的方法转储JIT编译的本机代码。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号