首页 > 其他 > 详细

垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

时间:2020-12-14 23:58:01      阅读:38      评论:0      收藏:0      [点我收藏+]

对于Java程序中对象而言,如果这个对象没有任何引用变量引用它,那么这个对象将不可能被程序访问,因此可认为它是垃圾;只要有一个以上的引用变量引用该对象,该对象就不会被垃圾回收。

对于Java的垃圾回收器来说,它使用有向图来记录和管理堆内存中的所有对象,通过这个有向图就可以识别哪些对象是“可达的”(有引用变量引用它就是可达的),哪些对象是“不可达的”(没有引用变量引用它就是不可达的),所有“不可达”对象都是可被垃圾回收的。

但对于如下程序:

class A

{

B b;

}

class B

{

A a;

}

public class Test

{

public static void main(String[] args)

{

A a = new A();

a.b = new B();

a.b.a = a;

a = null;

}

}

上面程序中A对象、B对象,它们都“相互”引用,A对象的b属性引用B对象,而B对象的a属性引用A对象,但实际上没有引用变量引用A对象、B对象,因此它们在有向图中依然是不可达的,因此也会被当成垃圾处理。

程序员可以手动执行System.gc(),通知GC运行,但这只是一个通知,而JVM依然有权决定何时进行垃圾回收。 

垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

原文:https://www.cnblogs.com/programb/p/14068398.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!