debug了几乎一天,就为了一个bug,折腾死我了。
bug的缘由是因为写代码的时候不小心,将:
写成了:
很明显,一个函数开始无限制地递归地调用自己了。
过不了多久,这个函数所在的thread的stack就会满了,所以会抛出 StackOverflowError。
一旦发现了java.lang.StackOverflowError,就说明程序中存在着死循环,或者递归层次过多,将当前thread所分配的stack全部用完了...
在我的程序中,这个java.lang.StackOverflowError是个意料之外的异常,我没有捕捉它,相反,这个exception被mina拿到了。在mina框架中,一旦它抓住了一个异常,就会调用exceptionCaught方法,这个方法默认会将Session关闭,于是反映出的现象是:
client端如果从connection pool中提取之前用过的socket进行通信,就会报告java.net.SocketException: Broken pipe。
原因就是Server端的socket被server主动关闭了。
这个现象非常类似于linux C网络编程中出现的SIGPIPE信号。虽然我没有查到准确的资料,但是我大概可以确定java中的Broken pipe异常就是因为检测到了SIGPIPE。
而产生SIGPIPE的一个典型场景就是在client-server架构中,server端主动关闭了socket连接。这时候client端的socket就会接收到一个RST包。如果我们继续对一个已经接收了RST包的socket调用写操作,就会产生SIGPIPE了。
分享到:
相关推荐
解决java.lang.StackOverflowError
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang....
34.java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 35.java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 36....
IDEA_JDK_64=C:\Program Files\Java\jdk1.8.0_144 修改后 IDEA_JDK_64=C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr (我的是有2019.3升级到2020.1的,) 转 ...
该文档对weblogic使用过程中,包括下载,安装,部署运营过程中出现的问题进行了描述和提供了解决方法,比如1. 包引入错误... 3 2. 乱码现象... 3 3. mime-typeType配置问题....7. java.lang.StackOverflowError. 5 等等
我们发现了优势,并将这个项目提升到了一个新的高度。 目前,我们处于测试版状态,因此情况一直在变化,我们不能保证任何一种API的稳定性。 但是,现在对供应商来说是安全的,并利用当前可用的资源。 加入项目! ...
如果某个线程的线程栈空间被耗尽,没有足够资源分配给新创建的栈帧,就会抛出 java.lang.StackOverflowError 错误。 线程栈是如何运行的? 首先给出一个简单的程序调用代码示例,如下所示: public class...
去除死循环,解决StackOverflowError错误
StackOverflowError:Fibonacci.java GC(垃圾回收练习) ReferenceQueue finlize()-- java9已弃用 reflect(反射) 反射实例:ReflectSample.java 实现自己的类加载器:MyClassLoader.java 类加载测试:...
例如,有时会引发异常:java.lang.StackOverflowError。 一段时间后,该设备将无法接收通知。 然后,我使用JSTACK和JMAP查找发生了什么事情,即DEADLOCK,这导致Java-APNS不再起作用。 我必须重新启动服务才能恢复...
SonarQube JSON分析器免责...故障排除如果JSON文件包含一些高度嵌套的对象(超过一百个嵌套级别),则您可能会遇到如下StackOverflowError : Exception in thread "main" java.lang.StackOverflowErrorat com.sonar.ss
StackOverflow 2019开发人员调查:世界地图合作者
用户用户提问和回答 2. 类似 Stackoverflow 的积分系统 3. 可提交文章用于知识库建设 4. 可设定只允许注册用户才能提问和回答 5. 简洁的 CSS 布局 6. 支持主流浏览器 安装方法: --------------------------------...
这是一个简单但功能强大的功能,可让您使用简单的关键字访问多个搜索引擎。 例如,您可以通过在地址栏中输入w monkeys在Wikipedia上搜索有关猴子的信息。 默认集合中包括以下搜索: 一个:amazon.com d :duck...
栈溢出抛出java.lang.StackOverflowError错误,出现此种情况是因为方法运行的时候栈的深度超过了虚拟机容许的大深度所致。 出现这种情况,一般情况下是程序错误所致的,比如写了一个死递归,有可能造成此种...
编程中有时会遇到一个系统异常java.lang.StackOverflowError,栈溢出错误,要理解这个错误,我们需要理解函数调用的实现机制,本文就谈谈它的基本原理 ...
用Nodejs编写,它是用于stackoverflow.com数据的脱机查看器。 设置 从下载Nodejs 从下载Postgresql 下载并遵循该项目的说明 (仅需要Comment.xml和Posts.xml。数据库大小约为70GB) npm安装striptags npm安装...
关于JVM内存区域的知识对于初学者来说其实是很重要的,了解Java内存分配的原理,这对于以后JAVA的学习会有更深刻的理解。下面来看看详细介绍。
它主要包含两个部分,jvm的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。 JDK :英文名称(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了...