在 Spring 服务中,我应该在方法末尾设置 null 或空列表以节省内存吗?
In a Spring service, should I set null or empty lists used in the end of a method to save memory?
我正在使用 spring 启动(由 JHipster 生成)和一些使用列表作为字段的服务。
我想知道我是否应该在使用它的方法末尾清空或取消此列表。
对 JVM 内存有影响吗?
考虑到此方法每天可以调用 100 次以上,并且考虑到每个用户都有自己的执行上下文,因此据我所知,字段不会删除以前的字段。
示例:
package fr.vyvcareit.poccarto.service;
//imports
@Service
@Transactional
public class SiteService {
//Liste temporaire pour repérer les doublons
private List<String> siteCodesDansImport ;
public SiteService() { }
public void preImportSiteError(List<Object> rows) {
this.siteCodesDansImport = new ArrayList<String>();
for (int i = 0; i < rows.size(); i++) {
checkSiteCode(int num_ligne, HashMap row);
}
// I'm all done, I do not need this.siteCodesDansImport anymore...
this.siteCodesDansImport=null; // => Is this line important for java memory ???
}
private void checkSiteCode(int num_ligne, HashMap row){
...
siteCodesDansImport.add(site_code);
...
}
}
如有任何帮助,我们将不胜感激!
默认情况下,Spring bean 具有单例作用域。这意味着您的服务每个应用程序只有一个实例。在单例 bean 上拥有字段不是线程安全的,应该避免。
每个新请求都会覆盖您的 collection 状态,并且请求会影响彼此的状态,这将导致不可预测的行为。
永远不要将状态存储到单例 bean 的字段变量中。
对于您的collection,只需使用局部变量。通过方法参数传递它(例如传递给 checkSiteCode
)。结束执行时,不需要设置为null
。 Java GC 会处理它。
我正在使用 spring 启动(由 JHipster 生成)和一些使用列表作为字段的服务。
我想知道我是否应该在使用它的方法末尾清空或取消此列表。
对 JVM 内存有影响吗?
考虑到此方法每天可以调用 100 次以上,并且考虑到每个用户都有自己的执行上下文,因此据我所知,字段不会删除以前的字段。
示例:
package fr.vyvcareit.poccarto.service;
//imports
@Service
@Transactional
public class SiteService {
//Liste temporaire pour repérer les doublons
private List<String> siteCodesDansImport ;
public SiteService() { }
public void preImportSiteError(List<Object> rows) {
this.siteCodesDansImport = new ArrayList<String>();
for (int i = 0; i < rows.size(); i++) {
checkSiteCode(int num_ligne, HashMap row);
}
// I'm all done, I do not need this.siteCodesDansImport anymore...
this.siteCodesDansImport=null; // => Is this line important for java memory ???
}
private void checkSiteCode(int num_ligne, HashMap row){
...
siteCodesDansImport.add(site_code);
...
}
}
如有任何帮助,我们将不胜感激!
默认情况下,Spring bean 具有单例作用域。这意味着您的服务每个应用程序只有一个实例。在单例 bean 上拥有字段不是线程安全的,应该避免。
每个新请求都会覆盖您的 collection 状态,并且请求会影响彼此的状态,这将导致不可预测的行为。
永远不要将状态存储到单例 bean 的字段变量中。
对于您的collection,只需使用局部变量。通过方法参数传递它(例如传递给 checkSiteCode
)。结束执行时,不需要设置为null
。 Java GC 会处理它。