运行递归程序时遇到JavaStackOverFlowError。程序是正确的,需要实现递归。我尝试使用命令查找当前堆栈大小
java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
这就是我得到的:
intx CompilerThreadStackSize = 0 {pd product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
Java版本"1.8.0_101"Java(TM)SE运行时环境(build 1.8.0_101-b13)JavaHotSpot(TM)64位服务器VM(build 25.101-b13,混合模式)
这是什么意思?如何增加堆栈大小以及应该设置什么值?对于上述设置,出现此错误是否正常?请帮忙。
如果您正在编写递归代码,而它没有终止递归的代码,那么无论堆栈大小有多大,最终都会出现堆栈溢出错误。
除了修复导致此错误的代码之外,您什么也做不了。
这意味着堆栈大小为1MB(1024KB)。您可以通过传递-Xss来增加线程堆栈大小
java -Xss32m
通常1MB的堆栈大小就足够了。对于我处理的大多数项目,我很少需要更改堆栈大小。所以很可能您的代码并不像您想象的那样正确。
问题内容: 由于以下原因,我知道如何设置堆栈大小: 如何在Node.js中增加最大调用堆栈大小 但是,默认大小是多少?(即,我如何获得的PHP等效项) 问题答案: 简单的答案是,默认堆栈大小为492 KB(32位)和984KB(64位)。 如soyuka所评论,请尝试以下操作: 要么
本文向大家介绍在C ++中正确使用堆栈和堆?,包括了在C ++中正确使用堆栈和堆?的使用技巧和注意事项,需要的朋友参考一下 堆栈-函数内部声明的所有变量将占用堆栈中的内存。因此,函数内的任何局部变量都位于堆栈中。 堆-这是程序的未使用内存,可用于在程序运行时动态分配内存。因此,如果我们希望某些东西的寿命比声明它的函数的寿命更长,则必须在堆上分配它。 示例 堆内存中的主要问题是碎片,而堆栈中更容易出
对于堆排序,如果我们想按升序对数组排序,那么应该在最大堆还是最小堆中转换堆?
问题内容: 如何确定Linux中程序的当前堆栈大小? 据说每个程序的堆栈大小在Linux中将是8 MB,但是当您使用cat / proc // mmap时,它将显示不同的大小。 另外,如何确定相关线程的堆栈大小?既然说线程有自己的私有堆栈? 问题答案: 如果仅需要当前的堆栈大小,则可以在main()的顶部声明一个变量,获取其地址,然后将其与在定义“当前”的位置声明的变量的地址进行比较。差异应为堆栈
问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步
问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此: