Questions tagged «stackoverflow»

2
是否可以在Java中捕获StackOverflowError?
我曾经以为不是,但是昨天我不得不这样做。这是一个使用Akka(JVM的参与者系统实现)来处理异步作业的应用程序。其中一位参与者执行了一些PDF操作,并且由于该库存在错误,因此有时会死于StackOverflowError。 第二个方面是,如果捕获到任何JVM致命错误(例如,StackOverflowError),则将Akka配置为关闭其整个actor系统。 第三个方面是该参与者系统被嵌入到Web应用程序中(出于WTF-ish,传统,原因),因此当参与者系统关闭时,Web应用程序就不会被关闭。最终结果是,在StackOverflowError我们的工作处理应用程序上,该应用程序变成了一个空的Web应用程序。 作为快速解决方案,我不得不赶上了StackOverflowError被抛出的问题,以便不会破坏actor系统的线程池。这使我认为也许有时可以捕获此类错误,尤其是在这种情况下?当有一个线程池处理任意任务时?与A不同,OutOfMemoryError我无法想象A如何StackOverflowError使应用程序处于不一致状态。在发生此类错误后将清除堆栈,因此计算可以正常进行。但是也许我错过了一些重要的事情。 另外,请注意,我一开始就是要修复错误(事实上,几天前我已经在同一应用程序中修复了SOE),但是我真的不知道什么时候可能会出现这种情况。 为什么最好重新启动JVM进程而不是捕获StackOverflowError,将作业标记为失败,然后继续我的业务? 有什么令人信服的理由永远不赶上国有企业?除了“最佳实践”,这是一个模糊的术语,什么也没告诉我。

1
seq在Haskell生产代码中多久使用一次?
我在使用Haskell编写小型工具方面有一些经验,我发现使用起来非常直观,尤其是对于编写过滤器(使用interact)来处理其标准输入并将其通过管道传输到标准输出。 最近,我尝试在比通常大10倍的文件上使用这样的过滤器,但出现Stack space overflow错误。 在阅读了一些内容之后(例如,在这里和这里),我确定了两个节省堆栈空间的准则(有经验的Haskellers,如果我写的东西不正确,请纠正我): 避免使用非尾递归的递归函数调用(这对所有支持尾调用优化的功能语言均有效)。 引入seq强制对子表达式进行早期评估,以使表达式在被缩减之前不会变得太大(这是Haskell所特有的,或者至少是使用惰性评估的语言所特有的)。 seq在我的代码中引入了五到六个调用之后,我的工具再次运行平稳(也适用于较大的数据)。但是,我发现原始代码更具可读性。 由于我不是一位经验丰富的Haskell程序员,所以我想问一下seq以这种方式进行介绍是否是一种常见的做法,以及通常seq在Haskell生产代码中看到该代码的频率。还是有什么技术可以避免使用seq太频繁而仍然只使用很少的堆栈空间?

4
多少堆栈使用量过多?
最近,当我编写C或C ++时,我会在堆栈上声明所有变量,只是因为它是一个选项,与Java不同。 但是,我听说在栈上声明大的东西是个坏主意。 为什么会这样呢?我认为涉及到堆栈溢出,但是我不清楚原因为何。 堆栈上有多少东西太多了? 我不是想将100MB的文件放在堆栈上,而只是将十几个千字节数组用作字符串缓冲区或其他任何东西。这是堆栈使用过多吗? (对不起,如果有重复,搜索堆栈时会不断引用堆栈溢出。甚至没有调用堆栈标记,我只是使用了抽象标记。)

3
多少个嵌套函数调用?
从MSDN引用有关StackOverflowException的信息: 当执行堆栈溢出时引发的异常,因为它包含太多的嵌套方法调用。 Too many这里很模糊。我怎么知道什么时候真的太多了?数千个函数调用?百万?我认为它必须以某种方式与计算机中的内存量相关联,但是是否可以提出一个大致准确的数量级? 我对此很担心,因为我正在开发一个涉及大量使用递归结构和递归函数调用的项目。我不希望我的应用程序在开始用于多个小型测试时会失败。

4
没有TCO时,什么时候需要担心堆叠失败?
每次都针对以JVM为目标的新编程语言进行讨论,不可避免地会有人说: “ JVM不支持尾调用优化,因此我预计会有很多爆炸式堆栈” 该主题有成千上万的变体。 现在,我知道某些语言(例如Clojure)具有可以使用的特殊递归结构。 我不明白的是:缺少尾部呼叫优化有多严重?我什么时候应该担心呢? 我感到困惑的主要根源可能是因为Java是有史以来最成功的语言之一,而且相当多的JVM语言似乎运行得很好。这怎么可能,如果缺乏TCO的是真的任何关注?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.