工作中遇到的java内存溢出异常(OutOfMemoryError)和栈溢出异常(StackOverflowError)

1.栈溢出异常(StackOverflowError)
     形成原因:  死循环调用方法。
        前几天提了关于栈溢出的一个故障单。微服务A请求微服务B资源的一个方法变成了懒加载,懒加载方法中判断当资源为空时就向微服务C请求资源,请求得到资源后,先缓存,再通微服务A去更新数据库{更新表结构时候还会向微服务B请求资源},然后再返回资源,当资源不为空时,则直接返回资源。但是当资源微服务A一直没有导入资源,上述过程就会形成一个环形结构,最后堆栈空间用完,造成栈溢出异常(StackOverflowError)。
   
    解决方法:通知微服务之前加个判断:资源为空时则不通知。


2.内存溢出异常(OutOfMemoryError)
    形成原因:
        资源对象都缓存在单粒类对象中,客户端请求时需要做一些处理,所以处理之前要clone一下,由于对象层次太深,有一个深层次对象List<String> attribute 属性没有clone,而这个属性在客户端的每次请求中都会将list的符合条件的内容字符串用“+”连接,再放入List,请求一定次数后最后导致List的大小大约达到了2M,最终导致了内存溢出(OutOfMemoryError)

   
解决方法:彻底的深度clone。


   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值