GC如何判断对象可以被回收

GC判断对象可被回收有两种方法:引用计数算法和根可达算法

引用计数算法

引用计数算法是一个已经被淘汰的算法,它是给每个对象加一个计数器,当有其他对象引用该对象时,该对象的计数器加一当这个引用失效时,计数器就会减一,当该对象的计数器为零时,就会认为该对象可以被所回收。 引用计数算法是一个简单并且高效的算法,但这种算法却有一个非常大的弊端。就是这种算法会造成对象的循环引用,导致即南这人对象不再被需要,仍然存在一个一直指向它的引用,使得计数器不为零,导致该对象无法被回收,造成内存空间的浪费

根可达性算法

根可达性算法是JVM默认的算法,他的原理就是定义一系列的根,我们把这些根称为:GC Rots。从GC Roots开始向下搜中间查找的路径被称为: 引用链索, 当一个对象到GC Roots之间没有任何引用链相连接时,我们就认为这个对象可以被GC回收。根可达性很好的解决了对象循环引用问题

JAVA的四种引用类型

在上述判断对象在何时能被GC收是,我们多次提到了引用,那大家一定好奇什么是引用? 引用有分为那些类型?一下我们就一一列举。 什么是引用? 举个例子: 假设我们创建了一个创建了一个User对象,就像这样: new User0,但是也仅仅是创建了一个对象,并没有办法访问它,如果我们要访问这个对象,就必须指定一个User类型变量来表示这个对象: User user = new User,user又被叫做”用”,"="是指user这个引用指向User对象。 所以,java里对象的引用就是一个类类型的变量指向创建出来的对象。 引用有分为那些类型? 在Java中引用被分为四种类型: 强引用、软引用、弱引用、虚引用.

评论

(= ̄ω ̄=)··· 暂无内容!

回复

您还未登录,请先登录或者注册