代码之家  ›  专栏  ›  技术社区  ›  leventov

热点JVM在堆栈替换编译期间是否执行转义分析?

  •  4
  • leventov  · 技术社区  · 7 年前

    考虑以下代码:

    void methodWithOSR() {
        Foo foo = new Foo(); // this object doesn't escape
        for (int i = 0; i < 1_000_000; i++) {
            // some code that uses `foo`
        }
    }
    

    Hotspot JVM能够实现规模化吗 foo 在堆栈上,C2 OSR编译何时开始?我认为这可能有问题,因为堆中已经存在活动对象,所以不可能将对象从堆“移动”到堆栈和寄存器。

    1 回复  |  直到 7 年前
        1
  •  3
  •   apangin    7 年前

    在这种情况下,不太清楚“Scalarize”是什么意思,但让我来解释一下这个问题。

    热点JVM在OSR编译期间是否运行转义分析?

    对与常规编译一样,大多数编译器功能/优化对OSR编译有效。

    热点是否受益于关于“标量化”(无论它意味着什么)的逃逸分析 Foo 实例在这里?

    标量替换的主要目标是消除分配,这不适用于Foo实例,因为对象已经在堆中分配。

    热点会将活动对象从堆移动到堆栈吗?

    热点能否优化访问

    对它可以缓存寄存器中的字段,例如 this case . 但是,修改仍将写回堆。