某次应用报了异常,异常信息提示为“GC overhead limit exceeded”,怀疑是内存存在问题,使用jmap导出其堆内存情况,并且使用MAT进行分析,发现了有concurrentHashMap大对象,继续追其原因发现都是“redirect:http://xxx“”对象,排查代码发现有使用到redirect的地方只有SpringMVC ModelAndView,在controller方法返回时返回了一个new ModelAndView("redirect:"+"{url}");
每次返回一个重定向的地址不一样时都会创建一个对象,于是随着请求数量越来越多,这个哈希对象就越来越大,最终造成“GC overhead limit exceeded”。
解决方案:使用response.sendRedirect()方法替代ModelAndView对象的方式。