我有一个弹簧控制器,可以实例化一个新的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对象,它们会在内存中闲逛,直到应用程序终止。
答案 0 :(得分:0)
在退出方法后,不必释放创建的对象。它们在gc()调用时释放。 Gc调用取决于多个参数,如时间,可用内存等。您可以手动尝试gc并检查对象是否仍然存在。
但通常从Controller中引用任何对象是不正确的。
你为什么需要这个?
private ChuckNorris chuckNorris;
如果控制器具有对POJO的引用,则POJO不能被销毁。尝试删除引用并重写代码以避免将实例存储在Controller的级别上。
无法在不了解您的业务逻辑的情况下告诉您如何重写代码。