java—如何在不访问jvm设置的情况下扩展堆栈大小?

3okqufwl  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(341)

我没有权限访问jvm设置,因为我正在提交要在别处运行的代码,所以我不能按照其他堆栈溢出的答案来扩展堆栈大小。有什么方法可以从我的java文件中完成吗?
我想这样做的原因(不是很重要):
我在一个有10^5个节点的树上使用递归。一般情况下是可以的,但不能保证树的形状。我正在处理一个边缘的情况下,树只是一条长长的线。我得到了一个stackOverflower错误,但是如果我能扩展我的堆栈大小,我的算法就会运行得很好。我想通过找到树的质心或使用稀疏矩阵来处理这种情况,但我更愿意将堆栈大小增加一倍并使用现有代码。

dl5txlt9

dl5txlt91#

总结一下这些评论,你可以创建一个新的线程并指定一个栈的大小,尽管文档说这些效果高度依赖于平台(至少在我的电脑上是有效的)。更多信息请参见:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/thread.html#%3cinit%3e(java.lang.threadgroup、java.lang.runnable、java.lang.string、long)
例子:

public static void main(String[] args)
{
    Thread thread1 = new Thread(null, null, "qwer", 1000000) {
        public void run() {
            System.out.println(countDepth());
        }
    };
    thread1.start();
}
public static int countDepth() {
    try {return 1+countDepth();}
    catch(StackOverflowError err) { return 0; }
}

(更改stacksize,您将看到更高的递归深度)

相关问题