java - 为什么在大型数组上使用 Arrays.sort(Object[] a) 时没有出现 StackOverflowError?

标签 java arrays mergesort

每个递归函数调用都会占用线程堆栈上的空间。 在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/

相关文章:

c++ - 将元素分配给数组不起作用(使用 OpenMP 的并行合并排序)

C++ 链表的合并排序不对前两个索引进行排序

java - @Autowire 调用期间未实例化服务类

java - Windows 上的 UTF-8/ISO-8859-1 编码问题 --> Unix

数组内的 PHP 对象(如何 : If array key is 0, 返回 0。否则如果数组键为 2,则返回 2。基本逻辑)

arrays - 如何在 json 模式中定义数组的最小大小

python - 为什么在尝试从列表中删除数组的数组时会出现此错误?

java - java中如何将String转换为Key

java - 如何使用未作为 jar 提供的 java 库

c++ - 以下程序的段错误