java.lang.StackOverflowError

java.lang.StackOverflowError :当应用程序递归太深而发生堆栈溢出时,抛出该错误。从以下版本开始:JDK1.0 .

StackOverflowError是由于当前线程的栈满了  ,也就是函数调用层级过多导致。

由于深度递归,抛出此错误以指示应用程序的堆栈已耗尽。

StackOverflowError扩展VirtualMachineError级,这表明JVM坏了,或者它已经耗尽资源而无法操作。此外,这个VirtualMachineError扩展了这个Error类,它用来表示应用程序不应该捕获的严重问题。一个方法不能在其throw子句中声明这样的错误,因为这些错误是永远不会发生的异常情况。

Java中的StackOverflowError

当Java应用程序调用函数调用时,会在调用堆栈上分配一个堆栈帧堆栈帧包含被调用方法的参数,其本地参数和方法的返回地址。返回地址表示执行点,在调用方法返回后,程序执行应继续执行。如果没有空间用于新的堆栈帧,StackOverflowError则由Java虚拟机(JVM)抛出。

可能会耗尽Java应用程序堆栈的最常见情况是递归在递归中,一个方法在执行期间调用自己。递归被认为是一种强大的通用编程技术,但必须谨慎使用,StackOverflowError以避免这种情况。

处理StackOverflowError

  • 最简单的解决方案是仔细检查堆栈轨迹并检测行号的重复模式。这些行号表示递归调用的代码。一旦你检测到这些行,你必须仔细检查你的代码,并理解为什么递归永远不会终止。
  • 如果你已验证递归正确实施,则可以增加堆栈的大小,以便允许大量的调用。根据安装的Java虚拟机(JVM),默认线程堆栈大小可能等于或者512KB1MB可以使用-Xss标志增加线程堆栈大小该标志可以通过项目的配置或通过命令行指定(更多详情可以百度)。-Xss参数的格式是:
    -Xss[g|G|m|M|k|K]



你可能感兴趣的:(Java)