黑马程序员技术交流社区
标题:
JVM垃圾收集时间的问题
[打印本页]
作者:
ciying88
时间:
2017-3-15 21:53
标题:
JVM垃圾收集时间的问题
引用计数算法(Reference Counting)
最初的想法,也是很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,当有一个地方引用它,计数器加1,当引用失效,计数器减1,任何时刻计数器为0的对象就是不可能再被使用的。
客观的说,引用计数算法实现简单,判定效率很高,在大部分情况下它都是一个不错的算法,但引用计数算法无法解决对象循环引用的问题。举个简单的例子:对象A和B分别有字段b、a,令A.b=B和B.a=A,除此之外这2个对象再无任何引用,那实际上这2个对象已经不可能再被访问,但是引用计数算法却无法回收他们。
根搜索算法(GC Roots Tracing)
在实际生产的语言中(Java、C#、甚至包括前面提到的Lisp),都是使用根搜索算法判定对象是否存活。算法基本思路就是通过一系列的称为“GC Roots”的点作为起始进行向下搜索,当一个对象到GC Roots没有任何引用链(Reference Chain)相连,则证明此对象是不可用的。在Java语言中,GC Roots包括:
1.在VM栈(帧中的本地变量)中的引用
2.方法区中的静态引用
3.JNI(即一般说的Native方法)中的引用
作者:
yangxiaosa
时间:
2017-3-15 21:57
{:8_488:}{:8_488:}{:8_488:}棒
作者:
Rainy°伤情
时间:
2017-3-15 23:36
可以的
作者:
DCS
时间:
2017-3-16 07:39
不错,有想法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2