gpt4 book ai didi

java - On Stack Replacement 编译时,Hotspot JVM 是否进行逃逸分析?

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:56 25 4
gpt4 key购买 nike

考虑以下代码:

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`
}
}

当 C2 OSR 编译启动时,Hotspot JVM 是否能够标量堆栈上的 foo?我想这可能会有问题,因为堆中已经存在 Activity 对象,因此可能无法将对象从堆“移动”到堆栈和寄存器。

最佳答案

在这种情况下,“scalaraize”的含义不是很清楚,但让我解释一下这个问题。

Does HotSpot JVM run Escape Analysis during OSR compilation?

是的。大多数编译器功能/优化对 OSR 编译都有效,就像对常规编译一样。

Does HotSpot benefit from Escape Analysis with respect to "scalarization" (whatever it mean) of Foo instance here?

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

Will HotSpot move live object from heap to stack?

没有。这样做没有意义。堆栈只是另一个内存区域。

Can HotSpot optimize access to Foo fields here?

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

关于java - On Stack Replacement 编译时,Hotspot JVM 是否进行逃逸分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47597047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com