JVM判断对象是否存活方法 以及 GC root集合

引用计数

  1. 优点:实现简单
  2. 缺点:难以解决对象循环引用的问题

可达性分析

  1. 对象是否与 GCroot 可达来判断对象将来是否会被使用

    基于图论观点:如果图的连通分量大于 GC root数量,那么就存在不可达的对象,不可达对象是Java编码用户 不可见,jvm运行时不可见的对象

Java中的GC root:

  1. 虚拟机栈(栈帧中的本地变量表)中的对象:方法堆栈用的参数,局部变量,临时变量等

  2. 方法区中的 类静态属性引用的变量 static

  3. 方法区中的 常量引用的对象:字符串常量池(String table)的引用

  4. Java虚拟机内部的引用:数据类型对应的class对象,常驻的异常对象,系统加载器等

  5. 所有被同步锁(synchronized关键字)持有的对象

  6. 反应Java虚拟机内部情况的 JMXBean,JVMTI中注册的回调,本地代码缓存等

  7. 不同内存区域,GC root标准不同导致的一些 临时性 加入的的对象等

发布了32 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TowerOs/article/details/104361254