我们的应用程序在 OSGI 容器上运行并遇到 OutOfMemory - Metaspace 错误。在分析 MAT 中的 heap dump 时,我发现以下类具有大量 Retained size。
A 类:
public class MyClassA{
.......
private static final Gson GSON = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()
.serializeNulls()
.create();
......
private static final Map<String, String> map = new HashMap<>();
static{
map.put("key1","value1");
}
}
根据我的理解,如果一个类有引用,它就不能被垃圾回收。在这种情况下,静态对象 GSON
具有对 MyClassA 的引用,并且 MyClassA 的类加载器也不能被垃圾回收。
我在想的另一个原因是,map
对象也有一个静态引用,这也阻止了类加载器。
你能告诉我我的理解是否正确?