Metaspace 中的静态对象内存泄漏

时间:2021-03-01 03:25:30

标签: java memory-leaks static osgi

我们的应用程序在 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 对象也有一个静态引用,这也阻止了类加载器。

你能告诉我我的理解是否正确?

0 个答案:

没有答案