美文网首页Java
编译器的两点优化

编译器的两点优化

作者: PetrichorHH | 来源:发表于2019-07-07 21:27 被阅读0次

1.编译器的常量优化

在给变量进行赋值的时候,如果右侧的表达式当中全部是常量,没有任何变量,


        例如:short num = 1 + 11;  // 等号右边全都是常量,没有任何变量参与运算


那么编译器javac将会直接计算出右侧的运算结果,并赋给左侧变量。

编译之后,得到的class字节码中相当于如下的语句:


        short num = 12;  // 右侧的常量结果没有超过左侧定义的数值范围,所以正确。


注意:一旦右侧表达式中有变量参与,那么这种优化就不会进行了。

2.数据类型“隐式强制”转换

对于byte、short、char三种数据类型来说,初始化赋值时为:


        byte b1 = 1;

        short s2 = 2;

        char c3 = 3;


此时,右侧本质上是一个int,

而将一个int赋值给byte、short、char时,应该进行强制类型转换,如


         byte b1 = (byte) 1;

        short s2 = (short) 2;

        char c3 = (char) 3;


但是在定义这三种类型时,我们一般采用前者,而不采用后者。

一方面是因为前者书写量少,

另一方面是因为对于byte、short、char三种类型来说,定义时当右侧数值没有超过范围,那么javac编译器会自动隐含的帮我们补上(byte)、(short)、(char)

注意:1. 右侧的数值未超过左侧的范围时,编译器自动补上强转。

           2. 右侧的数值超过了左侧的范围时,编译器直接报错。

相关文章

  • 编译器的两点优化

    1.编译器的常量优化 在给变量进行赋值的时候,如果右侧的表达式当中全部是常量,没有任何变量, 例如:short...

  • LLVM

    一、编译器 性能优化:启动优化、界面优化、架构优化 编译型语言:OC(编译器是clang)、C(编译器可以直接执行...

  • Linux 下如何绕过编译器优化

    本文首次发表在 Linux 下如何绕过编译器优化 有同学在群里聊到编译器优化的事情,很多时候期望编译器默认做优化,...

  • iOS逆向之OC反汇编(上)

    本文主要讲解编译器的优化以及指针的汇编 编译器优化 设置 可在项目的BuildSetting->Optimizat...

  • JMM造成指令重排的原因

    1、编译器优化 2、Processor 优化(流水线) 3、MESI缓存优化

  • 编译器优化部分代码

    我们简单写一些代码看编译器优化前后的对比。编译器没有优化时 在Build Setting 搜索optimizati...

  • 内联函数(Inline Function)

    场景:如果开启了编译器优化(Release模式默认会开启优化),编译器自动将某些函数变成内联函数 调用方式如下: ...

  • 晚期(运行期)优化

    HotSpot的即时编译器 解释器与编译器 编译对象与触发条件 编译过程 编译优化技术 如果还对其他的经典编译优化...

  • iOS的性能优化

    1、ipa包体积优化 1.1 编译配置优化:编译器代码层面优化Optimize Level;Bitcode(较难...

  • @inline inout

    内联函数 如果开启了编译器优化(Release模式默认会开启优化),编译器会自动将某些函数变成内联函数.即将函数调...

网友评论

    本文标题:编译器的两点优化

    本文链接:https://www.haomeiwen.com/subject/ilwihctx.html