如何在不访问 JVM 设置的情况下扩展堆栈大小?
How to extend stack size without access to JVM settings?
我无法访问 JVM 设置,因为我要在其他地方提交代码 运行,所以我无法遵循有关扩展堆栈大小的其他 Stack Overflow 答案。有什么方法可以从我的 Java 文件中做到这一点吗?
我想这样做的原因(不是很重要):
我在具有 10^5 个节点的树上使用递归。一般情况下是可以的,但是树的形状就没法保证了。我正在处理树只是一条长线的边缘情况。我收到 WhosebugError,但如果我可以扩展堆栈大小,我的算法会 运行 正常。我已经通过查找树的质心或使用稀疏矩阵来处理这种情况,但我更愿意将堆栈大小加倍并使用现有代码。
总结评论,您可以创建一个新线程并指定堆栈大小,尽管文档说效果高度依赖于平台(至少在我的电脑上有效)。在此处查看更多信息: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(WhosebugError err) { return 0; }
}
(改变堆栈大小,你会看到更高的递归深度)
我无法访问 JVM 设置,因为我要在其他地方提交代码 运行,所以我无法遵循有关扩展堆栈大小的其他 Stack Overflow 答案。有什么方法可以从我的 Java 文件中做到这一点吗?
我想这样做的原因(不是很重要):
我在具有 10^5 个节点的树上使用递归。一般情况下是可以的,但是树的形状就没法保证了。我正在处理树只是一条长线的边缘情况。我收到 WhosebugError,但如果我可以扩展堆栈大小,我的算法会 运行 正常。我已经通过查找树的质心或使用稀疏矩阵来处理这种情况,但我更愿意将堆栈大小加倍并使用现有代码。
总结评论,您可以创建一个新线程并指定堆栈大小,尽管文档说效果高度依赖于平台(至少在我的电脑上有效)。在此处查看更多信息: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(WhosebugError err) { return 0; }
}
(改变堆栈大小,你会看到更高的递归深度)