首页 > 解决方案 > Spring Rest API Controller 中的静态变量是否会导致内存泄漏?

问题描述

好的,所以我们的团队正在使用 Spring Framework 开发 api,经过几个附加功能后,我们面临内存泄漏,并决定重新检查整个代码以查找泄漏原因。

现在我很好奇我们在这里做的一种特殊做法

@RestController
@RequestMapping("/v1")
public class TransactionController {
    final static Logger logger = LogManager.getLogger(TransactionController.class);
    static Gson gson = new Gson();

    @RequestMapping(value = "/create-transaction", method = RequestMethod.POST, produces = "application/json")
    public @ResponseBody
    String createTransaction(@RequestBody String json, HttpServletRequest request, HttpServletResponse response) {
        long startTime = System.currentTimeMillis();
        try{
           ...
        } catch (Exception ex) {
            logger.error(LogAdapter.logToLog4jException(startTime, request, "", json, gson.toJson("output here"), ex.toString()), ex);
        }
    }
}

那么这两个静态变量会在这个类中的每个 api 调用中重新创建吗?或者最好在本地声明和使用它们?

编辑:我们的每个控制器类中都存在静态记录器和 gson 变量

之前谢谢

标签: javaspringmemorylog4j

解决方案


推荐阅读