调用堆栈的最大大小会不断变化

时间:2019-05-14 06:01:00

标签: clojure jvm

我们想检查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将在此处进行哪些优化?

0 个答案:

没有答案