乐鱼电竞





    教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

    Java的垃圾回收机制是什么?什么样的对象需要回收?

    更新时间:2021年05月21日11时12分 来源:乐鱼电竞 浏览次数:

    乐鱼电竞-一样的教育,不一样的品质

    (1)问题分析:

    什么样的对象会被当做垃圾回收?

    如何校验对象是否被回收?

    怎样通知垃圾回收器回收对象

    (2)核心答案讲解:

    1)问题 : 什么样的对象会被当做垃圾回收?

    当一个对象的引用(地址)没有变量去记录的时候, 该对象就会成为垃圾对象, 并在垃圾回收器空闲的时候对其进行清扫.

    2)问题 : 如何校验对象是否被回收?

    可以重写Object类中的finalize方法

    这个方法在垃圾回收器执行的时候, 被回收器自动调用执行的.

    3)问题 : 怎样通知垃圾回收器回收对象

    可以调用System类的静态方法gc( );

    通知垃圾回收器去清理垃圾

    (3)问题扩展:

    如何判断哪些对象需要回收呢?

    1)引用计数算法(java中不是使用此方法)

    每个对象中添加一个引用计数器,当有别人引用它的时候,计数器就会加1,当别人不引用它的时候,计数器就会减1,当计数器为0的时候对象就可以当成垃圾。算法简单,但是最大问题就是在循环引用的时候不能够正确把对象当成垃圾。

       public class Demo1_Gc {
           public static void main(String[] args) {
             Demo object1 = new Demo();
             Demo object2 = new Demo();
    
             object1.object = object2;
             object2.object = object1;
    
             object1 = null;
             object2 = null;
           }
         }

    2)根搜索方法

    这是JVM一般使用的算法, 根搜索算法是从离散数学中的图论引入的,程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点

    (4)结合项目中使用:

    1)尽量不要创建很大的对象

    原因 : GC回收算法从来不对大对象(>=85000字节)堆进行内存压缩整理,在堆中大的内存块会浪费太多CPU时间

    2)不要频繁的new生命周期很短的对象

    这样频繁垃圾回收频繁压缩有可能会导致很多内存碎片

    猜你喜欢:

    Java面向对象中类的定义是什么?

    JVM垃圾回收机制详细视频教程[java培训]

    怎么理解java的面向对象及三个特性

    乐鱼电竞java培训课程

    0 分享到:
    和我们在线交谈!
    【网站地图】【sitemap】