在看MAT得时候,看到关于GCRoot的定义中有一条:
系统类或者说是由系统类加载器加载的类。
HashMap位于java.util包下,由BootstrapClassLoader加载,那么它是不是GCRoot呢?
如果是的话,我还有一个疑问,想请教:如果HashMap是GCRoot,那么它内部存储的对象肯定包含在GCRoot引用链的了,那么每次在垃圾回收器回收的时候HashMap中的对象都无法被回收掉,那这样岂不是造成内存泄露了?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
GC Roots包括:
虚拟机栈中的变量。
方法区中的常量。
方法区中的静态变量。
同时,需要明确Java内存大致分为:虚拟机栈,Native方法栈,Java堆,本地程序计数器和方法区。一个HashMap引用可以作为GC Root,但是HashMap的实体就不是GC Root了。