微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://www.jb51.cc/java/437242.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐