今天我的一位同事在微信群里发了一张图片,勾起了我的好奇心:不同编程语言支持的函数递归调用的最大嵌套层数是?
Java 1.8
private static void recur(int i){
System.out.println("Stack level: " + i);
recur(++i);
}
测试结果:8644
Javascript in Chrome
Chrome版本:
Version 70.0.3538.102 (Official Build) (64-bit)
function a(i){
console.log("stack level: " + i)
a(i+1);
}
a(0);
测试结果:11412
JavaScript in nodejs
nodejs version: v8.11.3
测试结果:11213
Golang
版本:
测试结果:3947556
ABAP
data: lv_temp type int4.
form recur using iv type int4.
sy-index = iv.
lv_temp = iv + 1.
perform recur using lv_temp .
endform.
START-OF-SELECTION.
perform recur using 0.
实际上是out-of-memory错误。
测试结果:12258206
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
5. **本地方法栈**:与Java栈类似,但是用于支持本地方法的调用。 6. **Java栈**:每个线程私有的,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 7. **运行环境区**:指执行某个方法时所需的内存区域...
当程序递归调用层次太深或方法栈空间不足时,会抛出`StackOverflowError`。这种异常通常与递归算法的设计有关,或者是由于方法内部无限循环导致的。为了避免这类异常,可以通过调整递归算法或减少不必要的嵌套调用来...
当异常发生时,JVM会创建一个异常对象,并根据当前调用栈寻找适当的异常处理器。这个过程涉及到栈帧的回溯和异常匹配规则,可能会影响性能。因此,合理地使用异常处理可以避免不必要的性能损失。 总的来说,Java...
JavaCC 是一个用于构建解析器(parser)和词法分析器(lexer)的工具,能够帮助开发者快速地为编程语言或特定领域语言创建解析器。JavaCC 支持递归下降解析算法,并能自动生成 Java 代码。 **1.3 能否更详细地解释...
当线程请求的栈深度超过 JVM 所允许的最大深度时,会抛出 `StackOverflowError`。 #### 25. JVM 内存结构 - **堆内存**:存储对象实例。 - **栈内存**:存储局部变量和方法调用信息。 - **方法区**:存储类信息、...
3. 自定义的`DrawableTextView`重写了`onFinishInflate()`方法,确保在视图完成初始化后调用`initText()`。 4. 提供了一个`setText`方法的重写版本,这样在改变文本内容时,可以更新文本的宽度和高度。 5. 需要...
- **OOM**(Out Of Memory)通常发生在程序分配内存过多或内存泄漏的情况下。 - **判断**:即使当前使用内存低于最大限制,如果分配大对象时无法找到足够的连续内存空间,也会发生OOM。 #### 18. Android中的跨进程...