二、GC ROOT

jvm在判断对象是否还有用的时候,通常会从一些常见的地方开始进行搜索,只要对象不能从这些地方被引用到,就判断这些没被引用到的对象就是需要回收的,这些常见的地方就被成为GC ROOT,当然,这个是我自己的理解。

GC ROOT通常为以下几个:
Class:由系统类加载器(system class loader)加载的对象,这些类是不能够被回收的,他们可以以静态字段的方式保存持有其它对象。我们需要注意的一点就是,通过用户自定义的类加载器加载的类,除非相应的java.lang.Class实例以其它的某种(或多种)方式成为roots,否则它们并不是roots,.
Thread:活着的线程
Stack Local:Java方法的local变量或参数
JNI Local:JNI方法的local变量或参数
JNI Global: 全局JNI引用
Monitor Used: 用于同步的监控对象
Held by JVM: 用于JVM特殊目的由GC保留的对象,但实际上这个与JVM的实现是有关的。可能已知的一些类型是:系统类加载器、一些JVM知道的重要的异常类、一些用于处理异常的预分配对象以及一些自定义的类加载器等。然而,JVM并没有为这些对象提供其它的信息,因此就只有留给分析分员去确定哪些是属于"JVM持有"的了。

其实,对于gc root,有个了解就可以。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容