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


    对于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依然有权决定何时进行垃圾回收。 

    Java Program!
  • 相关阅读:
    API接口的安全设计验证—ticket,签名,时间戳
    能上QQ,浏览器不能上网?
    jQuery 获取元素当前位置offset()与position()
    USB Type-C工作原理解析
    利用SVN工具下载OpenCore代码
    内存数据保存到文件
    oracle07
    oracle06
    oracle05
    oracle04--伪列
  • 原文地址:https://www.cnblogs.com/programb/p/14068398.html
Copyright © 2020-2023  润新知