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

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

猜你在找的Java相关文章