gpt4 book ai didi

java - 标准 JIT 编译而不是 HotSpot 中的 On Stack Replacement

转载 作者:行者123 更新时间:2023-11-30 07:41:20 26 4
gpt4 key购买 nike

我正在尝试查看标准 JIT 编译的结果,而不是在 Java HotSpot VM 中使用 C1 的 OSR。我已使用 -XX:-UseOnStackReplacement 关闭 OSR,并使用 -XX:TieredStopAtLevel=1 将编译限制为 C1。但是现在我的方法根本没有被编译。我打开了 Print Compilation,如果我让它使用 OSR,它会很好地记录编译。此外,在没有 OSR 的情况下,我的所有断点都不会在 C1 文件中命中。

我正在使用一个非常简单的代码片段来测试这个

class Demo {
public static void main(String[] args) {
int a = workload();
System.out.println("Calculated answer is: " + a);
}

private static int workload() {
int a = 14;
for (int i = 0; i<100000; i++) {
a = a + i;
}
return a;
}
}

最佳答案

问题是您只调用一次workload 并多次执行该循环;您没有多次执行workload;这是你在这里遇到的主要问题。 JIT 可以优化方法,但这里只有一个循环 - 因此除非 OSR 处于 Activity 状态,否则没有太多需要优化的地方。

这很容易证明,您可以运行您的方法:

-XX:+UnlockDiagnosticVMOptions  
-XX:TieredStopAtLevel=1
-XX:+TraceNMethodInstalls // this is to track the compiled methods
-XX:-UseOnStackReplacement
com.so.jit.OSRCompilation // this is the classname I've used

在您将获得的输出中,您会看到很多安装方法

但是,如果您重新启用 OSR:

-XX:+UnlockDiagnosticVMOptions  
-XX:TieredStopAtLevel=1
-XX:+TraceNMethodInstalls // this is to track the compiled methods
-XX:+UseOnStackReplacement
com.so.jit.OSRCompilation // this is the classname I've used

你会得到一大堆安装方法还有一行:

 Installing osr method (1) com.so.jit.OSRCompilation.workload()I @ 5

关于java - 标准 JIT 编译而不是 HotSpot 中的 On Stack Replacement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56157390/

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