HashMap算不算GCRoot?

在看MAT得时候,看到关于GCRoot的定义中有一条:

  • 系统类或者说是由系统类加载器加载的类。

HashMap位于java.util包下,由BootstrapClassLoader加载,那么它是不是GCRoot呢?

如果是的话,我还有一个疑问,想请教:如果HashMap是GCRoot,那么它内部存储的对象肯定包含在GCRoot引用链的了,那么每次在垃圾回收器回收的时候HashMap中的对象都无法被回收掉,那这样岂不是造成内存泄露了?

阅读 4.7k
1 个回答

GC Roots包括:

  1. 虚拟机栈中的变量。

  2. 方法区中的常量。

  3. 方法区中的静态变量。

同时,需要明确Java内存大致分为:虚拟机栈,Native方法栈,Java堆,本地程序计数器和方法区。一个HashMap引用可以作为GC Root,但是HashMap的实体就不是GC Root了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进