每个递归函数调用都会占用线程堆栈上的空间。 在Java中,Arrays.sort(Object[] a) 使用合并排序。使用函数的递归调用进行合并排序。为什么我们没有得到大型数组列表的 StackOverflowError ?
我搜索了,在哪种情况下我应该使用递归或堆栈,但我没有找到明确的答案?
最佳答案
Arrays.sort 不使用合并排序的经典教科书版本,而是基于 TimSort as you can read here 的更复杂的版本。 .
此外,在 Java 中,堆栈大小不是固定限制,而是可以设置为 JVM 的选项。
如果您尝试的话,您可以非常容易地生成 OutOfMemory 异常或堆栈限制错误,但(值得庆幸的是)库函数旨在尝试避免它。
关于java - 为什么在大型数组上使用 Arrays.sort(Object[] a) 时没有出现 StackOverflowError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296455/