java的回收机制----根搜索算法
来源:互联网 发布:python inceptor 编辑:程序博客网 时间:2024/05/17 16:46
根搜索算法的基本思路是通过一系列的“GC Roots”的对象作为起始点,从这些节点开始往下搜索,搜索的走过的路径称为引用链,当一个对象到“GC Roots”没有引用链可达时(也就是用图论的话说就是从GC Roots到这个对象不可达),则证明此对象是不可用的,这样的对象被判定为是可回收的。
java中可以作为GC Roots对象包括以下几种:
1.虚拟机栈(栈帧中的本地变量表)中的引用对象。
2.方法区中的类静态属性引用的对象。
3.方法区中的常量引用的对象。
4.本地方法栈中JNI(也即一般说的Native方法)的引用的对象。
根搜索算法判断对象是否存活与引用有关。java将引用分为四类:强引用、软引用、弱引用、虚引用,这四种引用强度依次逐步减弱。
根搜索算法中不可达的对象并非“非死不可”,这时候它们暂时处于“缓刑”阶段,真正宣告一个对象死亡,至少要经历两次标记过程。如果通过根搜索后发现没有与GC Roots相连的引用链相连。它将会被第一次标记并且会进行筛选,当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为没有必要执行finalize()方法。
如果这个对象被判定为有必要执行finalize()方法,那么这个对象将会被放置在一个名为F-Queue的队列之中,并在稍后有一条虚拟机自动建立、低优先级的 finalize的线程去执行。虚拟机会触发finalize()方法,但并不承诺等待它执行结束。finalize()方法是对象逃脱死亡的最后一次F-Queue中的对象机会。GC将会对F-QUEUEF-Queue中的对象进行第二次小规模的标记,如果某个对象重新与GC Roots引用链上的对象建立关联关系,那么第二次标记时它将被移除F-Queue。
任何一个对象的finalize()方法都只会被系统自动调用一次,如果对象面临下一次回收,它的finalize()方法不会被再次执行。
本文是摘自深入理解JVM
- java的回收机制----根搜索算法
- Java垃圾回收之根搜索算法
- java垃圾回收机制的算法
- java 内存回收和回收机制的算法
- Java垃圾回收机制与典型的垃圾回收算法
- java垃圾回收机制,以及常用的回收算法
- Java垃圾回收机制与典型的垃圾回收算法
- Java垃圾回收机制与典型的垃圾回收算法
- Java垃圾回收机制与典型的垃圾回收算法
- Java垃圾回收机制与典型的垃圾回收算法
- Java垃圾回收机制与典型的垃圾回收算法
- Java垃圾回收机制算法
- java的回收机制
- JAVA垃圾回收机制的意义及其算法分析
- Java 垃圾回收机制 GC的算法和操作
- java垃圾回收机制GC所使用的算法
- 全面总结Java的GC算法和回收机制
- JVM垃圾回收根搜索的三种算法
- Mybatis3,Spring MVC 事务配置
- 指针数组VS数组指针
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- java 缓存输入输出流
- Linux(Ubuntu)入门
- java的回收机制----根搜索算法
- SqlServer表死锁的解决方法
- Myeclipse中快速定位到指定行
- 深度优先遍历与广度优先遍历
- JavaScript中闭包的简单应用
- View事件
- Python学习-机器学习实战-ch02KNN_part1
- 二维数组和指向指针的指针 ,指针做形参做局部变量以及内存分配
- Bitmap中的config