实际上导致java.lang.StackOverflowError的原因通常是无意的递归。 对我来说,通常我打算为覆盖方法调用超级方法。 比如在这种情况下:

publicclassVehicle{publicvoidaccelerate(floatacceleration,floatmaxVelocity){// set the acceleration}}publicclassSpaceShipextendsVehicle{@Overridepublicvoidaccelerate(floatacceleration,floatmaxVelocity){// update the flux capacitor and call super.accelerate// oops meant to call super.accelerate(acceleration, maxVelocity);// but accidentally wrote this instead. A StackOverflow is in our future.this.accelerate(acceleration,maxVelocity);}}

首先,了解调用函数时幕后发生的事情很有用。调用方法的参数和地址被推送到堆栈上(参见[http://en.wikipedia.org/wiki/Stack_(abstract_data_type)#Runtime_memory_management)],以便被调用的方法可以访问参数,因此当被调用的方法完成后,执行可以在调用后继续。但是因为我们以递归方式调用this.accelerate(acceleration,maxVelocity)(当一个方法调用自身时递归是松散的。有关更多信息,请参阅[http://en.wikipedia.org/wiki/Recursion_(computer_science))]我们在一种称为无限递归的情况,我们不断地在调用堆栈上堆积参数和返回地址。由于调用堆栈的大小有限,我们最终会耗尽空间。调用堆栈上的空间耗尽称为溢出。这是因为我们试图使用比我们更多的堆栈空间,并且数据实际上溢出了堆栈。在Java编程语言中,这会导致运行时异常java.lang.StackOverflow并立即停止该程序。

上面的例子有点简化(虽然它比我想承认的更多。)同样的事情可能发生在一个更圆的方式使它更难以追查。 但是,一般情况下,一旦发生,StackOverflow通常很容易解决。

从理论上讲,堆栈溢出也可能没有递归,但在实践中,它似乎是一个相当罕见的事件。

java的stackoverflow_call stack - 导致java.lang.StackOverflow的原因相关推荐

  1. Java集合之Stack(出自Java知识体系)

    安琪拉正在梳理Java知识体系,这篇讲Java集合的Stack.如果希望获取完整的<安琪拉Java知识体系>整理中, 完成后公众号回复"知识体系" 即可获取. 完整的J ...

  2. Spark 训练机器学习模型莫名报错(java.lang.stackoverflow)

    遇到一个问题,为此熬了夜,如果没遇到这篇文章,很难发现原因. 具体描述一下问题,我的代码如下: var dataDf = ... // load from other place val inDoub ...

  3. eclipse问题(!MESSAGE Unhandled event loop exception !STACK 0 java.lang.NullPointerException at org.e)

    问题: !MESSAGE Unhandled event loop exception !STACK 0 java.lang.NullPointerException at org.eclipse.s ...

  4. java进程cpu使用率高_什么会导致Java应用程序的CPU使用率飙升?

    问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...

  5. activitythread.java,Android ActivityThread.reportSizeConfigurations导致应...

    我的应用程序崩溃了.它发生在很多用户及其在ActivityThread.java方法reportSizeConfigurations中的多个位置.我不知道这是用来做什么的,为什么它会冻结. 冻结发生在 ...

  6. java中的stack类和C++中的stack类的区别

    文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...

  7. java中堆栈(stack)和堆(heap)

    http://www.ej38.com/showinfo/java-172156.html 堆栈是一种先进后出的数据结构,只能在一端进行输入或输出数据的操作  Stack类在java.util包中 向 ...

  8. java locale中文_locale错误导致Java中文乱码错误的总结

    线上执行MapReduce任务计算时,经过排查发现了某些服务器计算的数据出现中文乱码问题,但是服务器的配置是完全一致的.由于我们使用的key可能包含中文,中文乱码问题体现在每次合并map记录的时候计算 ...

  9. 因证书过期导致Java 执行http相关动作失败

    此处证书过期会导致java的http相关动作时报如下错误: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlg ...

最新文章

  1. zookeeper图形工具——zkui
  2. 揭秘:机器究竟是怎么学习的?
  3. Groovy学习专栏
  4. 高考题(可作为试讲资料)
  5. jpa连接mysql报错_Spring boot jpa mysql 连接数据库SSL错误
  6. Self-training在目标检测任务上的实践
  7. C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序...
  8. 计组之存储系统:2、SRAM(区别、栅极电容、双稳态触发器、DRAM刷新、地址复用)和DRAM(MROM、PROM、EPROM、EEPROM)
  9. OJ1080: a+b(多实例测试3)(C语言)
  10. [白开水]-maven的命令程序mvn脚本分析
  11. oracle游标fetch_SQL游标@@ FETCH_STATUS函数概述
  12. python编程入门教程下载-Python编程从入门到实践的PDF教程免费下载
  13. python变量定义模糊_刚接触python,对变量还有点模糊,下面的代码帮忙看下
  14. autocad2014点击保存闪退_autocad2014启动闪退 AutoCAD启动时闪退怎么办
  15. 原生小程序用画布制作海报,等比例缩放,和uniapp差不多就是写法有点不同
  16. 4412开发板项目实战-云服务器智能家居
  17. 邮箱地址注册申请能免费注册吗?
  18. 利用NTLDR进入RING0的方法及MGF病毒技术分析
  19. 王道考研408 数据结构 第三章 栈、队列与数组
  20. 咧咧一下“汉语编程”

热门文章

  1. iPhone开发入门
  2. 马云雕像事件谁在背后操刀?
  3. meter元素的使用
  4. windows安装spacemacs
  5. 集成支付宝SDK流程
  6. Week05手写笔记
  7. svg标记marker
  8. 中小企业服务器配置方案(第一章 代理接入服务器)
  9. RouterOS 宽带拨号接入上网设置教程(超详细)
  10. pq法潮流计算matlab,基于MATLAB电力系统PQ潮流计算程序设计(范文1)