NET CLR中一代的垃圾收集器是如何管理对象的生命周期的?什么叫非确定性终结?
发布网友
发布时间:2022-04-29 01:34
我来回答
共2个回答
热心网友
时间:2023-10-02 04:42
我不知道你说的一代垃圾回收器是什么
我只给你讲现在的原理,当开始进行垃圾回收工作时,clr会从最跟对象开始,如静态字段里的对象,遍历整个对象池,如果有引用就进行标记,剩下的对象都会被定为待回收对象,这时候这些对象已经没有任何引用可以访问到,他们被暂时搁置,等第二次垃圾回收的时候,才会把这些对象所占用的内存清理,当然之前还是会调用finalize方法的。
因为会调用finalize方法,这时候有可能会把对象赋给一个静态字段或者其他对象可引用,那么这个对象就复活了,所以在没有被清理以前,对象的状态就叫非确定性终结。
不知道这样讲你明白么
热心网友
时间:2023-10-02 04:42
通过对象的引用计数控制。也就是记录了还有多少个变量在使用这个对象。当计数为0时,就代表对象没有用了,就进入回收条件。
垃圾回收器在系统空闲或内存紧缺以及代码中显示凋用回收时自动决定何时启动回收,所以没法确定终结一个对象的具体时间。