我们想检查JVM上调用堆栈的最大深度,为此我们运行了以下
(defn abcd [i]
"A function to find the max recursion allowed"
(try (abcd (inc i))
(catch Throwable t
(println "Failed at" i)
(prn (class t)))))
我希望i
的值一直都是一样的,因为堆栈大小总是会一样的! (可以有一些细微差别,但是在这里我看到深度变化很大)
(abcd 0)
Failed at 4852
java.lang.StackOverflowError
(abcd 0)
Failed at 4917
java.lang.StackOverflowError
(abcd 0)
Failed at 23609
java.lang.StackOverflowError
(abcd 0)
Failed at 23620
java.lang.StackOverflowError
深度在第一次运行中较小,然后一直保持在20k范围内。 JVM将在此处进行哪些优化?