本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在java中设置最大递归深度

发布于2021-11-11 15:55     阅读(709)     评论(0)     点赞(5)     收藏(3)


我知道这个问题已经通过多种方法得到了回答:

  • 设置最大堆栈大小 ( -Xss20m)
  • 无论如何都要避免测试 - 如果您需要更大的递归,则问题出在程序中。

这些方法很好,但我知道我的代码有问题,我想特别限制(到一个小数字,例如 5)递归深度,以测试这是否是问题所在。
有没有一种方法,比如sys.setrecursionlimit在python中?


解决方案


创建这个类:

public class RecursionLimiter {
    public static int maxLevel = 10;

    public static void emerge() {
        if (maxLevel == 0)
            return;
        try {
            throw new IllegalStateException("Too deep, emerging");
        } catch (IllegalStateException e) {
            if (e.getStackTrace().length > maxLevel + 1)
                throw e;
        }
    }
}

然后导入静态并将emerge()调用插入代码中任何可以深度递归的方法的开头。您可以通过maxLevel变量调整最大允许递归级别emerge()过程将在大于该变量值的级别上中断执行。您可以通过设置maxLevel为 来关闭此行为0此解决方案是线程安全的,因为它根本不使用任何计数器。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/313446/fa5ff323797566db12df/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0
收藏该文
已收藏

评论内容:(最多支持255个字符)