可以在循环中创建复杂对象并在循环中调用方法会导致stackOverflow异常吗?

时间:2015-02-04 08:31:57

标签: java for-loop stack-overflow

在我的项目中有一个stackOVerFlow异常, 他们在迭代Map对象时在for循环中创建对象。

我怀疑通过调用循环内的其他类方法来创建这个复杂的对象会导致stackOverFlow。

对此的任何想法都将非常感激。

以下是JAVA中的代码

 for (final Map.Entry<String, SomeBean> entry : actualBeanInfo.getPropertyMap().entrySet()) 
{
        final SomeBean property = entry.getValue();

        propName = property.getName();


        if (property.getGetter() == null) {
            continue;
        }

        if (ignoreProperty(property)) {
            continue;
        }

        Object value = SomeBeanUtilities.getBeanProperty(obj, property);
        value = SomeBeanUtilities.valueFromProperty(property, declaredType, null, value, context);
    }

我觉得下面两行导致错误。

Object value = SomeBeanUtilities.getBeanProperty(obj, property);
        value = SomeBeanUtilities.valueFromProperty(property, declaredType, null, value, context);

1 个答案:

答案 0 :(得分:1)

在循环中执行某些操作(例如whilefor循环)`不会导致堆栈溢出。保证。循环不会导致分配新的堆栈帧。

调用方法可以,特别是如果方法是直接或间接递归的。 (你可以在没有递归的情况下获得堆栈溢出,但它不太可能......除非你创建了堆栈太小的线程。)这同样适用于构造函数。

然而,知道这不会让你走得很远。如果要跟踪实际上导致堆栈溢出的内容,您需要查看堆栈跟踪和所涉及方法的代码。 (方法的主体 ...)


  

我怀疑......

不要浪费你的时间寻找基于“怀疑”的错误。收集并分析证据并使用它(以及良好的老式逻辑)指导您的错误搜寻。