首页 > 编程知识 正文

android jdk,Java GC

时间:2023-05-03 13:14:25 阅读:130571 作者:4433

用于记录学习

另一方面,可达性分析算法:以一系列对象“GC Root”为起点,从这些节点开始向下搜索。 搜索通过的路径称为参考链(Reference Chain ),如果参考链没有从一个对象连接到GC Root,则该对象无法到达,该对象不可用,垃圾收集器占用其内存

在java语言中,可以用作GCRoot的对象包括:

a. java虚拟机堆栈(堆栈帧中的本地变量表)中引用的对象。

b .方法区域中的类静态属性引用的对象。

c .方法区域中的常量引用的对象。

d .本地方法堆栈中JNI本地方法的引用对象。

二、垃圾回收器(GC ) Roots实际上是垃圾回收器应回收的对象。 垃圾收集器回收不再被GC Roots引用的对象,而不是GC Roots引用的对象。

这里有几个GC Roots的对象。 一个对象可以属于多种类型的根。 有以下类型的根对象:

Class-由系统的类加载器加载的class。 此class无法卸载。 可以通过静态数据字段引用对象。 注意,在用户定制的类加载器中加载的Class不会充当GC Roots,除非相应的java.lang.Class实例碰巧是GC Roots对象

Thrad-生存线程

堆栈局部Java方法的变量或方法参数

JNI Local-JNI方法的变量或方法参数

JNI全局-全局JNI引用

Monitor Used-同步监视的对象

Held by JVM-JVM出于某些原因具有对垃圾收集器中几个对象的引用。 其实,这里关系到JVM本身的实现。 可能的原因之一是系统的类加载器、一些jvm本身已知的异常类、预分配的异常处理对象和加载类的自定义类加载器。 不幸的是,JVM很少提供其他详细信息来描述这些对象。 因此,这只是通过分析判断哪个对象是所谓的JVM持有的。

如果对象是GC Roots对象,则在所有视图中将进行特殊标记,以指示该对象是独立对象。 下图显示了Fragment的“对象视图”路径

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。