垃圾回收机制

一、垃圾回收过程:

        1、发现无用的对象

        2、回收无用对象占用的内存空间

        垃圾回收机制保证可以将“无用的对象”进行回收。无用的对象指的就是没有任何变量 引 用该对象。Java 的垃圾回收器通过相关算法发现无用对象,并进行清除和整理

二、垃圾回收相关算法

        1、引用计数法  

                 堆中的每个对象都对应一个引用计数器,当有引用指向这个对象时,引用计数器加 1,而当指向该对象的引用失效时(引用变为 null),引用计数器减 1,最后如果该 对象的引用计算器的值为 0 时,则Java 垃圾回收器会认为该对象是无用对象并对其 进行回收。优点是算法简单,缺点是“循环引用的无用对象”无法别识别

        2. 引用可达法(根搜索算法)

                 程序把所有的引用关系看作一张图,从一个节点 GC ROOT 开始,寻找对应的引用 节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找 完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点

三、通用的分代垃圾回收机制

·Minor GC: 用于清理年轻代区域。Eden 区满了就会触发一次 Minor GC。清理无用对象,将有用 对象复制到“Survivor1”、“Survivor2”区中。

·Major GC: 用于清理老年代区域。

·Full GC: 用于清理年轻代、年老代区域。 成本较高,会对系统性能产生影响

导致Full GC:

        1. 年老代(Tenured)被写满

        2. 持久代(Perm)被写满

        3. System.gc()被显式调用

        4. 上一次 GC 之后Heap的各域分配策略动态变化

                

其他要点

        1. 程序员无权调用垃圾回收器。

         2. 程序员可以调用 System.gc(),该方法只是通知 JVM,并不是运行垃圾回收器。尽量少用,会申请启动 Full GC,成本高,影响系统性能

         3. finalize 方法,是 Java 提供给程序员用来释放对象或资源的方法,但是尽量少用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值