我一直在试图解决我的Java代码中由于我正在执行的递归而发生的堆栈溢出异常。我知道在Eclipse IDE中增加堆栈大小可以解决这个问题。我想知道,如果这个异常,就像我们创建一个可执行文件并运行一样,发生在JVM中。操作系统是否不关心该可执行文件所需的内存?发生在JVM中的堆栈溢出异常发生在可执行文件中
0
A
回答
0
运行应用程序时使用的内存有两种不同的类型(概念上)。
堆是正在创建和存储对象实例的位置。这是内存的主要部分,也是由JVM收集的垃圾,操作系统确实负责将这些内存分配给您的应用程序。话虽如此,JVM总是以它可能从OS获得的最大内存量的某种配置启动(这是可配置的)。
第二种类型的内存称为堆栈,它由JVM在内部用于支持方法调用。当你调用一个方法时,你传递给该方法的参数被放置在堆栈上,并且每当你引用一个方法参数时被引用。堆栈的另一个用法是用于方法局部变量(即,您在方法中定义的变量)。
当您用完堆栈时会发生堆栈溢出(多么令人惊讶)。由于它的使用性质,栈比堆更有限,不应该被滥用。如果你有遍历整个树/层次结构的递归方法,并且你得到了一个点,在那里你会得到大输入的堆栈溢出异常,这肯定是一个标志,你应该将你的递归转换为迭代(参见:Design patterns for converting recursive algorithms to iterative ones)
相关问题
- 1. 如果发生DispatcherUnhandledException异常,则在Control.LayoutUpdated中发生异常之后发生堆栈溢出
- 2. 当其中一个执行线程发生堆栈溢出异常时,JVM会退出吗?
- 3. 如何在堆栈溢出发生之前看到堆栈?
- 4. 在方法调用中引发堆栈溢出异常
- 5. VerifyError:错误#1023:addItem发生ArrayCollection时发生堆栈溢出
- 6. 堆栈溢出异常
- 7. 堆栈溢出异常
- 8. 堆栈溢出异常
- 9. IIS中的堆栈溢出异常
- 10. JVM不退出时发生TimeoutException异常
- 11. 避免堆栈溢出(C中的迷宫发生器)
- 12. 使用递归函数可能会发生堆栈溢出吗?
- 13. cuda-gdb:“CUDA_EXCEPTION_9:Warp硬件堆栈溢出”的含义/发生
- 14. 如何获取__del__中发生异常的堆栈跟踪?
- 15. 在.NET中除二位小数时发生溢出异常
- 16. 执行二进制搜索树搜索时发生堆栈溢出错误
- 17. 为什么在发生异常时不显示堆栈跟踪?
- 18. 直到发生堆栈溢出为止的剩余堆栈大小
- 19. 之前堆栈溢出异常的main()
- 20. Expecto FsCheck在生成字符串时出现堆栈溢出异常
- 21. “堆栈溢出在行...”在IE中
- 22. Jenkins的groovy jsonBuilder发生间歇性堆栈溢出错误
- 23. 递归Quicksort引发堆栈溢出异常
- 24. 如何缩小堆栈溢出异常?
- 25. C#WPF Window.ShowDialog堆栈溢出异常
- 26. 避免堆栈溢出异常
- 27. 调试C# - 堆栈溢出异常?
- 28. AppDomain.FirstChanceException和堆栈溢出异常
- 29. 捕捉堆栈溢出异常C#
- 30. 没有递归函数调用会发生堆栈溢出吗?
您必须为操作提供最大允许内存。举一个简单的例子,如果你的代码无限运行,并且JVM正在为它分配所有可用的内存,所有它。会发生什么?? –
感谢您的快速回复。 1.我的代码无法无限运行。它只是根据输入做更多的递归。我已经增加了JVM的堆栈大小,它运行良好。 2.我担心如果使用相同的代码创建一个exe并运行,会发生什么情况。 – Sujju
那么,我不是在谈论你的代码。我只是给你一个例子。 ;) –