Hen*_*son 16 java stack-overflow
我正在编写一个函数,可以调用自己大约5000次.当然,我得到了一个StackOverflowError.有什么方法可以用相当简单的方式重写这段代码吗?:
void checkBlocks(Block b, int amm) {
//Stuff that might issue a return call
Block blockDown = (Block) b.getRelative(BlockFace.DOWN);
if (condition)
checkBlocks(blockDown, amm);
Block blockUp = (Block) b.getRelative(BlockFace.UP);
if (condition)
checkBlocks(blockUp, amm);
//Same code 4 more times for each side
}
Run Code Online (Sandbox Code Playgroud)
那么,我们可以称之为功能的深度有多大限制?
Ric*_*nte 20
使用显式堆栈对象和循环,而不是调用堆栈和递归:
void checkBlocks(Block b, int amm) {
Stack<Block> blocks = new Stack<Block>();
blocks.push(b);
while (!blocks.isEmpty()) {
b = blocks.pop();
Block blockDown = (Block) b.getRelative(BlockFace.DOWN);
if (condition)
blocks.push(block);
Block blockUp = (Block) b.getRelative(BlockFace.UP);
if (condition)
blocks.push(block);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
java中的默认堆栈大小为512kb.如果超过该程序将终止抛出StackOverflowException
您可以通过传递JVM参数来增加堆栈大小:-Xss1024k
现在堆栈大小是1024kb.您可以根据您的环境提供更高的价值
我认为我们不能以编程方式改变这一点