springMVC redirect view时存在内存泄漏-解决方案

探讨了Spring MVC中使用redirect:view导致的内存泄漏问题及其解决办法,推荐使用标准JEE API实现重定向。

出问题的代码:return new ModelAndView("redirect:" + targetUrl); 其中targetUrl是需要转向的目标URL,可能包含动态的参数。

 

         springMVC在处理上述代码时,会认为这种redirect:XXX是一个View定义,会在其beanfactory中尝试寻找对应的 bean定义,在寻找过程中,会向其beanfactory内部的一个alreadyCreated Map变量中缓存本次寻找结果(key是viewName,value是布尔值true)。在存在巨量的重定向时,这个alreadyCreated就会引起内存泄漏。在spring的buglist中可以找到相同情况的说明:https://jira.springsource.org/browse/SPR-10065

   

         spring提供了解决该问题的方案,但是,是通过一些个人觉得比较晦涩的用法,很容易会误用。(https://jira.springsource.org/browse/SPR-10065有说明),因此建议最好的方法是:在重定向中尽可能的避免使用spring提供的redirect:view视图。而使用标准的JEE API:

    String encodedRedirectURL = response.encodeRedirectURL(targetUrl);

    response.sendRedirect(encodedRedirectURL);

 

         并且,该问题在测试过程中很容易会被忽略,因为每次向alreadyCreated Map中只增加一个URL字符串,每次泄漏的内存很微小,因此在压测过程中容易被忽略,但是长期积累就会引起问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值