你真的相识JVM吗?
堆内存的分派和接纳:我们着重讲一下假造机在堆上的垃圾网络,在线程私有的内存分区中,内存会跟着要领竣事可能线程的竣事而接纳,以是这部门没有太多的操纵空间,而堆和要领区是被全部线程所共享的一块地区,也是我们有须要深入相识的地区。 a).判定工具的存活:在内存走漏的常识点中提到过 可达性算法 这一观念,在可达性算法中,有一个 GC Roots 的观念,这个算法的根基头脑就是假如一个工具到 GC Roots没有任何引用链相连(也就是从GC Roots到这个工具不行达)时,则证明此工具是不行用的,他们会被鉴定为是可接纳的工具; 除此之外,尚有另一个更简朴的要领,给每个工具添加一个引用计数器,假若有一个处所引用它,计数器加1,引用失效的时辰,计数器减1,计数器的值为0时这个工具就是可接纳的,这是 引用计数算法 的根基头脑,可是引用计数算法无法办理轮回引用的题目,可以看到如下图的4、5、6三个工具,存在彼此轮回的引用,导致这三个工具的引用计数器不为0,可是这三个工具的简直确是属于必要接纳的领域的,这也是许多主流假造机放弃行使引用计数算法的缘故起因。 在java中,可以作为GC Roots的工具有4种:
b).工具引用:java中界说了四种引用,引用强度从强到弱依次是 强引用 、 软引用 、 弱引用 和 虚引用 。 c).接纳工具:假如一个工具是GC Roots不行达的,也 不必然 会被接纳,假如这个工具 包围 了finalize()要领而且这个finalize()要领是 第一次 被假造机挪用,那么此时会执行工具的finalize()要领,假如在要领中,它从头与引用链中的恣意一个工具成立了关联 ,那么它就可以逃过被接纳的运气。 垃圾网络算法 上面先容了堆上工具从建设到接纳的进程,那么下面我们就来相识一下假造机到底是用什么样的方法来接纳工具。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |