考虑以下代码:
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编译何时开始?我认为这可能有问题,因为堆中已经存在活动对象,所以不可能将对象从堆“移动”到堆栈和寄存器。
foo
在这种情况下,不太清楚“Scalarize”是什么意思,但让我来解释一下这个问题。
热点JVM在OSR编译期间是否运行转义分析?
对与常规编译一样,大多数编译器功能/优化对OSR编译有效。
热点是否受益于关于“标量化”(无论它意味着什么)的逃逸分析 Foo 实例在这里?
Foo
标量替换的主要目标是消除分配,这不适用于Foo实例,因为对象已经在堆中分配。
热点会将活动对象从堆移动到堆栈吗?
热点能否优化访问 傅
傅
对它可以缓存寄存器中的字段,例如 this case . 但是,修改仍将写回堆。