Java之垃圾回收机制

Java之垃圾回收机制

    垃圾回收机制的特征

        1.垃圾回收机制只负责回收堆内存中的对象,不回收任何物理资源

        2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。当对象永久性地失去引用后,系统就会在

           合适的时候回收它所占的内存。

        3.在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使该对象重新复活。(让一个

           引用变量重新引用该对象),从而导致垃圾回收机制取消回收。


    对象在内存中的状态

        1.可达状态:   当一个对象被创建后,若有一个以上的引用变量引用它,则这个对象在程序中处于不可达状态,

                             程序可通过引用变量来调用该对象的Field和方法。

        2.可恢复状态: 如果程序中某个对象不再有任何引用变量引用它,它就进入可恢复状态。在这种状态下,系统垃

                              圾回收机制准备回收该对象所占用的内存,在回收该对象之前,系统会调用所有可恢复对象的

                              finalize()方法进行资源清理。如果系统在调用finalize()方法时重新让一个引用变量引用该对象,

                              则这个对象会再次变为可达状态;否则该对象进入不可达状态。

        3.不可达状态:当对象与所有引用变量的关联都被切断,且系统已经调用所有对象的finalize()方法后依然没有使

                              该对象变成可达状态,那么这个对象将永久性地失去引用,最后编程不可达状态。只有当一个

                              对象处于不可达状态时,系统才会真正回收该对象所占用的资源。


    对象的软,弱和虚引用

        1.强引用:程序创建一个对象,并把这个对象赋给一个引用变量,程序通过该引用对象来操作实际的对象,当一

                       个对象被一个或一个以上的引用变量所引用时,它处于可达状态,不可能被系统垃圾回收机制回收。

        2.软引用:需要通过SoftReference类来实现,当一个对象只有软引用时,它有可能被垃圾回收机制回收。对于

                       只有软引用的对象而言,当系统内存空间足够时,它不会被系统回收,程序也可使用该对象;当系统

                       内存空间不足时,系统可能会回收它,软引用通常用于对内存敏感程序中。

        3.弱引用:需要通过WeakReference类实现,弱引用和软引用很像,但弱引用的引用级别更低。对于只有弱引

                        用的对象而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内

                        存。当然,并不是说当一个对象只有弱引用时,它就会立即被回收---正如那么失去引用的对象一样

                        ,必须等到系统垃圾回收机制运行时才会被回收。

        4.虚引用:通过PhantomReference类实现,虚引用完全类似于没有引用。虚引用对对象本身没有太大影响,对

                        象甚至感觉不到虚引用的存在。如果一个对象只有一个虚引用时,那么它和没有引用的效果大致相同

                        。虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,虚引用必须和引用队列联合使

                        用。


    对象软,弱,虚引用的作用

        使用这些引用类可以避免在程序执行期间将对象留在内存中。如果以软,弱和虚引用的方式引用对象,垃圾收集

        器就能够随意地释放对象。如果系统尽可能减小程序在其生命周期中所占用的内存大小时,这些引用类就很有用

        处。





转载于:https://my.oschina.net/Ccx371161810/blog/265357

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值