栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中序列化对象时出现StackOverflowError

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中序列化对象时出现StackOverflowError

陈的有趣的帖子:

调试堆栈溢出时,您需要关注重复的递归部分

在您的情况下:

        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)        at java.util.ArrayList.writeObject(ArrayList.java:570)        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)        at java.lang.reflect.Method.invoke(Method.java:597)        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)

如果您遍历缺陷跟踪数据库以尝试查看这是否是已知问题,那么搜索堆栈中的顶级功能就不太可能找到有趣的东西。这是因为堆栈溢出通常在递归的随机点发生;即使每个堆栈溢出都是相同的堆栈溢出,它们在表面上看起来也彼此不同。

一旦克服了最初的动荡,堆栈跟踪就会稳定下来,形成一个很好的重复模式,该重复模式由相同的x函数一遍又一遍组成。
识别重复模式的开始并不重要,因为每次碰撞的起点都会有所不同,就像超出每次演唱范围的精确音符会因碰撞而有所不同一样。

一旦确定了重复部分,请从中选择一个与众不同的功能,然后在缺陷数据库中进行搜索。

例如,默认

ArrayList
序列化。

在这里,您

GrahPanel
指的
Simulation
是指的
Graph
,可能具有较长
ArrayList
的Sensor和Edge

Java序列化记录每个写入流的对象的记录。如果第二次遇到相同的对象,则仅将对它的引用写入流中,而不是该对象的第二个副本;因此循环引用不是这里的问题。

但是,对于某些类型的结构,序列化容易受到堆栈溢出的影响。例如, 将通过递归写入每个链接来序列化没有特殊writeObject()方法的长链接列表。
如果您有100,000个链接,则将尝试使用100,000个堆栈帧,并且很可能因StackOverflowError而失败

可以为这样的列表类定义一个writeObject()方法:当第一个链接被序列化时,只需遍历该列表并迭代地序列化每个链接即可;这将阻止使用默认的递归机制。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号