Spring boot - 为什么我的Restcontroller没有发布对新POJO的引用?

时间:2017-04-18 20:48:32

标签: java spring spring-mvc model-view-controller garbage-collection

我有一个弹簧控制器,可以实例化一个新的POJO。此POJO将用于从数据库中反序列化XML对象。

我注意到了IDEAs Memory View插件,在我的应用程序的生命周期中,只创建了一个控制器对象(如预期的那样)但是对于每个对控制器的请求,都会创建一个新的POJO实例,即使在请求已完成。

这导致内存不足异常。

解决这个问题的最佳方法是什么?

@RestController
public class VendorController {

  private ChuckNorris chuckNorris;

  @RequestMapping("/vendor")
  public String vendors() {
    ChuckNorris chuckNorris = new ChuckNorris();
    chuckNorris.setType("roundhouse");

    return "test";
  }
}

在此代码中,每个请求都会创建一个新的ChuckNorris对象,它们会在内存中闲逛,直到应用程序终止。

1 个答案:

答案 0 :(得分:0)

在退出方法后,不必释放创建的对象。它们在gc()调用时释放。 Gc调用取决于多个参数,如时间,可用内存等。您可以手动尝试gc并检查对象是否仍然存在。

但通常从Controller中引用任何对象是不正确的。

你为什么需要这个?

private ChuckNorris chuckNorris;

如果控制器具有对POJO的引用,则POJO不能被销毁。尝试删除引用并重写代码以避免将实例存储在Controller的级别上。

无法在不了解您的业务逻辑的情况下告诉您如何重写代码。