【问题标题】:Not sure how and where I am stuck in this infinite loop不知道我是如何以及在哪里陷入这个无限循环
【发布时间】:2013-10-30 18:33:21
【问题描述】:

我的代码中出现java.lang.OutOfMemoryError: Java 堆空间异常。我尝试输入打印语句,看看我是否陷入了无限循环。我知道我的最后一个循环处于无限循环中,因为当我将变量"i" 设置为count 时,当程序到达250000 时,我必须停止多少次迭代。为什么我会陷入这个无限循环,我该如何解决?

【问题讨论】:

  • 你在哪里查看i < 250000
  • 我刚刚将 i 声明在循环之外并将 i 放在最后一个 for 循环中,我一直在增加超过 250000,但是一旦程序到达那个数字区域,我就手动停止了程序
  • 他每次经历所有事情时都会打印出i。他说当i 达到 250,000 时,他终止了该程序。但是i 的打印输出和增量发生在 4 个嵌套循环内……如果每个循环只发生 23 次,那么你会很快达到 250,000(23*23*23*23 = 279841)。你怎么知道那是错的?
  • “它”有多少订单?你知道吗?
  • 大约有1000个订单

标签: java memory heap-memory infinite-loop


【解决方案1】:

我认为你实际上是因为这条线而陷入了无限循环

temporaryOrderSampleSet.add(orderSample);

您不断将 orderSample 对象添加到此集合中,然后立即检查同一集合的所有成员。因此,您从 1 开始并检查 1,然后添加第二个并检查 1 和 2,然后添加 3,然后检查 1、2 和 3,等等...

【讨论】:

  • 是的,如果你需要的话。这是您想要检查最内部循环中的每个对象的功能吗?
  • 是的,我正在尝试将每个属性放入样本中,然后将样本中现在包含订单中的属性,所以我希望第一个属性进入第一个样本,然后进入第一个顺序,然后让第二个属性进入第二个样本进入第二个顺序等。
  • 那我该去哪里清除集合呢?在第二个 for 循环之后?
【解决方案2】:

您永远不会清除temporaryOrderSampleSet。这对吗?它会很快增长。 (另外,这听起来不太临时。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多