Java垃圾回收器在访问路径被破坏时如何处理循环引用?

问题描述:

我只是想让别人向我解释一下,GC如何发现那些内存块(在红色区域中绘制)在引用计数大于0但是实际上无法访问时是垃圾? heap spaceJava垃圾回收器在访问路径被破坏时如何处理循环引用?

有一组被认为总是可以访问的“根对象”:例如,线程引用,静态变量,类引用。如果某些对象无法通过这些根对象的引用链接到达,则认为它可用于GC,即使对该对象有一些引用。

GC算法的细节依赖于Java的实现,因此它取决于您的VM。但大多数虚拟机不使用引用计数。官方虚拟机甚至有几种可配置的算法可用。所以这很难概括。

GarbageCollector基于Java内存模型工作。在java中可用的应用程序内存分为两部分:堆栈和堆栈。一个对象存储在堆内存中,可以通过两种方式访问​​: - 对象可以具有存储在堆栈内存中的引用变量。在这种情况下,可以通过使用它的引用变量直接访问对象。

2)对象可以由任何其他对象被包含,并且不会有在堆栈存储器中的任何引用。在这种情况下,只能使用该容器对象访问此对象。所以如果容器对象是垃圾回收,那么这个对象必须符合垃圾回收的条件。

虽然做垃圾回收GarbageCollector检查一个对象是否是在栈提供任何引用直接或间接访问的,如果是,那么它不会收集这些对象否则做收集。