【问题标题】:JIT compilation即时编译
【发布时间】:2016-08-17 15:32:33
【问题描述】:

我想知道这样的结构:

 for (Suits suit : Suits.values()) {
        // do stuff
}

立即在此编译:

     Suits[] suits = Suits.values();
       for (Suits suit : suits ) {
            // do stuff
      }

我明白,它们会在一些圈子之后被编译成第二个变体,但它会发生在第一个圈子上吗?

【问题讨论】:

    标签: java jit


    【解决方案1】:

    第一个编译阶段是javac 编译器。您应该注意,当 for-each 构造作为语法添加时,不需要对底层字节码进行任何更改,并且这些编译基本相同。

    这是在 JIT 优化代码之前很久。

    注意:如果您担心性能问题,您最不想做的是调用Enum.values(),因为这每次都会创建一个新数组(结果会产生大量垃圾)。我建议您将此数组缓存在不会被修改的地方。

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2013-04-12
      • 2013-10-01
      • 1970-01-01
      相关资源
      最近更新 更多