简单直观的一个方法是:对一个对象添加引用计数器。每当有地方引用它时,计数器的值加 1;当引用失效时,计数器de的值减 1.而当计数器的值为 0 时这个对象就不会再被使用,判断为已死。但这种方法有些情况会不准确:比如当对象 A 中有一个字段指向了对象 B,而对象 B 中 也有一个字段指向了对象 A,而事实上他们俩都不再使用,但计数器的值永远都不可能为 0,也就不会被回收,然后就发生了内存泄露。 正确的方法是:可达性分析. 所有生成的对象都是一个为"GCRoots"的根的子树。从 GC Roots 开始向下搜索,搜索所经过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链可以到达时,就称这个对象是不可达的或者是不可引用的,也就是已经死去的对象,可以被 GC 回收了。那哪些可以作为gc root呢,有栈中的本地变量,方法区中的静态变量,本地方法栈中的变量,正在运行中的线程,它们有一个特性,就是它只会引用其他对象,而不会被其他对象引用。 本文转自:https://blog.csdn.net/qq_59614812/article/details/122901619
标签:java,死去,对象,计数器,GC,引用,一个,方法 From: https://www.cnblogs.com/nizuimeiabc1/p/16592132.html