gpt4 book ai didi

java - 为什么导致 StackOverflowError 的递归方法的调用次数在程序运行之间有所不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:08 25 4
gpt4 key购买 nike

<分区>

用于演示目的的简单类:

public class Main {

private static int counter = 0;

public static void main(String[] args) {
try {
f();
} catch (StackOverflowError e) {
System.out.println(counter);
}
}

private static void f() {
counter++;
f();
}
}

上面的程序我执行了5次,结果是:

22025
22117
15234
21993
21430

为什么每次结果都不一样?

我尝试设置最大堆栈大小(例如 -Xss256k)。然后结果更加一致,但每次都不相等。

Java 版本:

java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)

编辑

当禁用 JIT (-Djava.compiler=NONE) 时,我总是得到相同的数字 (11907)。

这是有道理的,因为 JIT 优化可能会影响堆栈帧的大小,并且 JIT 完成的工作肯定会因执行而异。

尽管如此,我认为如果通过引用一些关于该主题的文档和/或 JIT 在这个导致帧大小变化的特定示例中完成的工作的具体示例来证实这一理论,那将是有益的。

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