加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 递归函数中堆栈溢出的原因

发布时间:2020-12-15 01:04:36 所属栏目:Java 来源:网络整理
导读:在this video大约28分钟的时间里,学生要求Brian Harvey在编写程序时是否应该在递归过程中使用迭代过程.他说没有,因为 Your programs are not gonna run into space limitations. And in terms of locality of whats in memory,you have to have a lot more c

在this video大约28分钟的时间里,学生要求Brian Harvey在编写程序时是否应该在递归过程中使用迭代过程.他说没有,因为

Your programs are not gonna run into space limitations. And in terms of locality of what’s in memory,you have to have a lot more control than you do over the way the program is interpreted to really affect that.

由于这不是一个计划课程,我以为他一般都在谈论编程语言.当他说“你的程序不会遇到空间限制.”,他是否忽略了堆栈溢出?我对他的答案感到困惑,因为没有堆栈溢出意味着你已经用完函数调用了空间?我对“地方性”部分一无所知.堆栈溢出可能发生在方案,java和其他语言中.我是正确的还是我误解了他的陈述?

最佳答案
您所指的视频是计算机科学讲座.计算机科学在很大程度上是理论性的,并且解决了许多与实用性无关的计算细节.在这种情况下,正如他在讲座开始时说的那样,今天的计算机体积庞大且足够快,性能很少成为问题.

内存位置与任何语言的StackOverflowExceptions无关.实际上,内存局部性指的是SRAM(静态RAM),它保存了当总线从内存中检索数据时可以带入的相邻数据的缓存(可以是磁盘或RAM).从此缓存中获取数据比从内存中获取数据要快,因此如果多个连续操作所需的所有数据都在缓存中,程序将运行得更快.

现在这都是非常低级的.在大多数(如果不是全部)现代语言(如Java)的背后,有一个编译器正在进行许多低级优化.首先,这意味着您无法在低级别优化代码,尤其是在不干扰编译器优化的情况下.其次,(就像他在你所指的片段之后说的那样),除非你是一个资源密集型游戏,否则不值得花时间去担心性能(除非你有明显的性能问题,但更有可能表示代码中的其他问题).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读