java的stackoverflow_call stack - 导致java.lang.StackOverflow的原因
实际上导致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的原因相关推荐
- Java集合之Stack(出自Java知识体系)
安琪拉正在梳理Java知识体系,这篇讲Java集合的Stack.如果希望获取完整的<安琪拉Java知识体系>整理中, 完成后公众号回复"知识体系" 即可获取. 完整的J ...
- Spark 训练机器学习模型莫名报错(java.lang.stackoverflow)
遇到一个问题,为此熬了夜,如果没遇到这篇文章,很难发现原因. 具体描述一下问题,我的代码如下: var dataDf = ... // load from other place val inDoub ...
- 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 ...
- java进程cpu使用率高_什么会导致Java应用程序的CPU使用率飙升?
问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...
- activitythread.java,Android ActivityThread.reportSizeConfigurations导致应...
我的应用程序崩溃了.它发生在很多用户及其在ActivityThread.java方法reportSizeConfigurations中的多个位置.我不知道这是用来做什么的,为什么它会冻结. 冻结发生在 ...
- java中的stack类和C++中的stack类的区别
文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...
- java中堆栈(stack)和堆(heap)
http://www.ej38.com/showinfo/java-172156.html 堆栈是一种先进后出的数据结构,只能在一端进行输入或输出数据的操作 Stack类在java.util包中 向 ...
- java locale中文_locale错误导致Java中文乱码错误的总结
线上执行MapReduce任务计算时,经过排查发现了某些服务器计算的数据出现中文乱码问题,但是服务器的配置是完全一致的.由于我们使用的key可能包含中文,中文乱码问题体现在每次合并map记录的时候计算 ...
- 因证书过期导致Java 执行http相关动作失败
此处证书过期会导致java的http相关动作时报如下错误: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlg ...
最新文章
- zookeeper图形工具——zkui
- 揭秘:机器究竟是怎么学习的?
- Groovy学习专栏
- 高考题(可作为试讲资料)
- jpa连接mysql报错_Spring boot jpa mysql 连接数据库SSL错误
- Self-training在目标检测任务上的实践
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序...
- 计组之存储系统:2、SRAM(区别、栅极电容、双稳态触发器、DRAM刷新、地址复用)和DRAM(MROM、PROM、EPROM、EEPROM)
- OJ1080: a+b(多实例测试3)(C语言)
- [白开水]-maven的命令程序mvn脚本分析
- oracle游标fetch_SQL游标@@ FETCH_STATUS函数概述
- python编程入门教程下载-Python编程从入门到实践的PDF教程免费下载
- python变量定义模糊_刚接触python,对变量还有点模糊,下面的代码帮忙看下
- autocad2014点击保存闪退_autocad2014启动闪退 AutoCAD启动时闪退怎么办
- 原生小程序用画布制作海报,等比例缩放,和uniapp差不多就是写法有点不同
- 4412开发板项目实战-云服务器智能家居
- 邮箱地址注册申请能免费注册吗?
- 利用NTLDR进入RING0的方法及MGF病毒技术分析
- 王道考研408 数据结构 第三章 栈、队列与数组
- 咧咧一下“汉语编程”