可达性分析算法(GCROOT)的过程
可达性分析算法(GCROOT)的过程
可达性分析算法:
(当前主流语⾔的内存管理⼦系统都是通过可达性分析算法来判断对象是否存活,Java语⾔同样,没有使⽤引⽤计数法算法的)
基本思路:GC roots的对象作为起始节点集合,从这些节点开始,根据引⽤关系向下搜索,搜索过程所⾛过的路径称为 引⽤链,如果某个对象到GC roots没有任何引⽤链相连,那么这个对象就被认为是可以回收的对象。
金融学就业方向>恢复格式化文件
GC Roots:
蜘怎么组词
1.  虚拟机栈中引⽤的对象(各个线程被调⽤的⽅法堆栈中使⽤到的参数,局部变量,临时变量等)
2. ⽅法区中静态对象,常量对象,字符串常量池中的对象机械迷城第四关攻略
宝贝 张悬 歌词3. 本地⽅法栈中native⽅法中引⽤的对象
4. JVM中常驻的异常对象(NullPointException,OutOfMemoryError等),基本类型对应的Class对象
5. synchronized包含的对象
一尺多少厘米6. 反应JVM内部情况的本地代码缓存、JMXBean、JVMTI中注册的回调等
7. 还有⼀些较为复杂的情况(多个区域的关联对象)等等
对象是GC Roots⾮关联对象⼀定会被回收?
并不是⾮死不可的,如果该对象没有覆盖finalize()⽅法,或者finalize()⽅法已经被JVM调⽤过,那么JVM将这两种情况都视为⾮必要回收对象。
对象怎么被回收?
会被放在F-Queue队列中,接着JVM会⾃动建⽴⼀个低调度优先级的线程Finalizer执⾏队列中对象的finalize()⽅法(会保证开始执⾏,不保证⼀定会执⾏完毕(因为某些finalize()⽅法可能会出现问题,⽐如死循环等)),如果finalize()⽅法中没有问题,则会被回收。如果存在问题,⽐如将⾃⼰赋值给⼀个可以到达GC Roots的对象,那么这个对象会被移出 回收对象集合。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。