【发布时间】:2020-11-13 23:28:54
【问题描述】:
我无权访问 JVM 设置,因为我正在提交要在其他地方运行的代码,因此我无法遵循有关扩展堆栈大小的其他 Stack Overflow 答案。有什么方法可以从我的 Java 文件中执行此操作吗?
我想这样做的原因(不是很重要):
我在具有 10^5 个节点的树上使用递归。一般情况下是可以的,但不能保证树的形状。我正在处理一种边缘情况,即树只是一条长线。我得到一个 StackOverflowError,但如果我可以扩展我的堆栈大小,我的算法将运行良好。我虽然通过查找树的质心或使用稀疏矩阵来处理这种情况,但我更愿意将堆栈大小加倍并使用我现有的代码。
【问题讨论】:
-
算法改成迭代算法不是更好吗?
-
堆栈是在 JVM 启动时设置的,所以除非“其他地方”提供了调整它的方法,否则不会。
-
@JavaMan 是的,这可能是坏事,但我需要改变很多东西,我试图避免它
-
或者您可以将当前状态存储在
Stack实例中。当然,在这种情况下你不能使用递归,必须手动维护堆栈操作。 -
你可以construct a new thread with an explicit stack size。但是,无论它是否受到尊重或您需要多少堆栈大小,都是特定于实现的。后者甚至可能在同一运行时发生变化。见Why is the max recursion depth I can reach non-deterministic?
标签: java jvm stack-overflow jvm-arguments