gpt4 book ai didi

java - 静态变量Java的垃圾收集 - 内存不足

转载 作者:行者123 更新时间:2023-11-29 05:52:04 26 4
gpt4 key购买 nike

我们有一个应用程序,我们完全缓存了大量数据。缓存作为静态 map 进行维护。

由于数据每天都会被一些批处理周期修改,所以我们在数据修改后刷新缓存。刷新缓存是通过创建新对象并将静态变量引用到这些新对象来完成的。因此,每天都会创建新对象并取消引用旧对象。

但问题是服务器堆内存不断增加,直到有一天它在没有内存异常的情况下崩溃。

我真的怀疑取消引用的对象是否被垃圾收集。

这是我的课。

Class CacheService {
public static Map<String,Article> articleCache = null;

public docache(){
private Map<String,Article> tempArticleCache= new HashMap<String,Article>();

//Caching stuff
//finally
articleCache = tempArticleCache; // i hope defreferencing takes place here.
}

}

函数 docache() 将每天被调用以更新缓存。任何人都可以帮助我在没有这个问题的情况下实现缓存。

最佳答案

我怀疑旧 map 仍在某处引用。我建议您尝试以下操作(不要每次都创建新 map ,而是简单地清除现有 map 并重新填充它): p>

      public docache(){ 
if(articleCache!= null){
//clear the elements of existing map
articleCache.clear();
}else{
articleCache = new HashMap();
}
//do the map population
}

如果这也不起作用,那么在崩溃之前拍摄内存快照并检查哪些对象正在消耗您的堆。这将使人们更好地了解这个问题。

关于java - 静态变量Java的垃圾收集 - 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13521261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com