一次StackOverflowError异常记录

项目A迁移至Dubbo后出现StackOverflowError错误,通过分析发现与BeanUtils的beanToMap方法递归调用有关。尝试优化代码及采用beanMap进行对象转换,最终解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原有项目A转换成dubbo后,同样代码,报错如下:

018-02-27 09:57:05 [DubboServerHandler-172.19.18.144:20881-thread-5] ERROR: com.alibaba.dubbo.rpc.filter.ExceptionFilter#invoke  请求ID(cea29a2b7824482f908122492ce441c2):  [DUBBO] Got unchecked and undeclared exception which called by 172.19.18.144. service: com.qqjf.xd.enterprise.ICorpVer2BizService, method: saveCorpInfo, exception: java.lang.StackOverflowError: null, dubbo version: 2.6.0, current host: 127.0.0.1
java.lang.StackOverflowError
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57)
at sun.reflect.UnsafeQualifiedObjectFieldAccessorImpl.get(UnsafeQualifiedObjectFieldAccessorImpl.java:38)
at java.lang.reflect.Field.get(Field.java:393)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:220)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)
at com.qqjf.common.bean.BeanUtils.beanToMap(BeanUtils.java:221)


StackOverflowError造成该异常本质原因两个:

1.java虚拟机栈:如果线程请求的栈深度大于虚拟机栈所允许的深度;

2.本地方法栈:与java虚拟机栈类似。


网上找了一些方案有两个:1.优化原有代码,将反射变量放入队列,可能是优化的不正确,没有效果;

2.使用beanMap进行对象转换成map,没有报StackOverflowError。原因参考

http://blog.youkuaiyun.com/q358543781/article/details/50176953

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值