谈谈java中对象与垃圾的回收

1,内存中对象的状态

        一个对象根据它被引用变量的状态,可以分为三种。

        ①可达

         当一个对象创建后,要是有一个或者多个变量引用它,这个对象在程序中的状态就是可达状态。

        ②可恢复

         对象不再用任何引用变量引用它,该对象就是可恢复状态,对象在此状态下,垃圾回收机制就准备回收该对象占用的内存,但是,在这之前,系统会调用该对象的finalize()方法进行资源清理。若系统调用该方法时,让一个或多个引用变量引用了该对象,该对象的状态就变为可达状态,否则为不可达状态。

        ③不可达

           对象与一切引用变量的都不关联,并且系统调用了该对象的finalize()方法,还是没用把该对象的状态变为可达状态,那么该对象的状态为不可达状态,系统会回收该对象占用的资源。

2,系统强制垃圾回收

        当对象处于不可达状态时,系统就可以回收对象的资源,但是至于何时被回收,对于程序是完全透明的,程序能控制一个对象能不能被引用或不被引用,但不能控制何时被回收。

        我们可以通过调用System.gc()或者Runtime.getRuntime().gc()强制系统回收(只是通知系统进行回收),系统会尽快进行垃圾回收。

3,finalize

        在进行垃圾回收之前,系统会调用该对象的finalize()方法进行资源的清理,这个方法继承自Object类,所以,所有的对象都具备这个方法。

        java类也可以对finalize方法进行重写。只有在系统认为需要更多的内存时,垃圾回收机制才会回收资源,系统才会调用对象的finalize方法。所以,不要把对象的finalize方法当成一定会执行的方法。有可能程序终止时,对象也不会被回收。还有系统调用对象的finalize方法时也不一定是垃圾回收,有可能是使对象达到可达状态。

4,对象的引用

        对于对象而言,程序中一般会有一个引用变量引用该对象,这种引用被称为强引用。其次还用另外三种引用:软引用,弱引用,虚应用。

        强引用:创建对象,赋值给引用变量,这种方式称为强引用,程序可以通过该引用操作对象的方法与属性,这种对象不可能被垃圾回收,处于可达状态。

        软引用:当对象只用软引用时,该对象可能会垃圾回收,当系统内存充足时,不会被垃圾回收,当内存不足时,可能会回收。软引用通过SoftRefence类来实现。软引用通常用于内存敏感的程序中。

        弱引用:与软引用类似,比软引用的级别低。当对象处于弱引用时,系统垃圾回收机制运行,不管是否内存充足,都会回收该对象。弱引用通过WeakReference类实现。

        虚引用:跟没有引用大致相同,虚引用主要用来跟踪对象被垃圾回收的状态,且虚引用不能单独使用,必须和引用队列联合使用。虚引用通过PhantomReference类实现。

 

转载于:https://my.oschina.net/u/3553496/blog/1052700

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java垃圾回收机制是Java虚拟机(JVM)自动管理内存的一种机制。在Java程序,程序员不需要手动分配和释放内存,而是由JVM负责自动回收不再使用的对象Java垃圾回收机制的基本原理是通过“可达性分析”来确定哪些对象是存活的,然后回收那些不再被引用的对象。可达性分析是从一组称为“GC Roots”的起始对象开始,通过引用链来遍历和标记可达对象。无法通过引用链访问到的对象则被标记为可回收垃圾对象Java垃圾回收机制的工作过程分为三个阶段:标记、清除和整理。在标记阶段,垃圾回收器标记所有可达对象。在清除阶段,垃圾回收回收标记为垃圾对象,并且释放它们所占用的内存空间。在整理阶段,垃圾回收器将存活的对象向一端移动,以便在内存布局形成连续的内存块。这样可以解决内存碎片问题,提高内存利用率。 Java垃圾回收机制具有以下优点: 1. 自动化管理:程序员不需要手动释放内存,减少了内存泄漏和悬挂对象对象已被释放但仍然被引用)的可能性。 2. 高效性能:Java垃圾回收机制采用分代回收算法,根据对象的存活时间将内存分为多个代,根据不同的代使用不同的垃圾回收算法,提高了回收效率。 3. 防止空指针异常:垃圾回收器可以检测并处理不再使用的对象,避免了程序运行过程的空指针异常错误。 4. 提高开发效率:不需要手动管理内存,减少了程序员的工作量,提高了开发效率。 然而,Java垃圾回收机制也存在一些问题,比如垃圾回收过程可能会导致程序的暂停时间变长,对实时性要求较高的程序可能会受到影响。此外,垃圾回收机制的性能也会受到堆内存的大小和程序的运行负载等因素的影响。 总的来说,Java垃圾回收机制是一种非常成熟和高效的内存管理机制,它解放了程序员手动管理内存的负担,提高了开发效率和程序的健壮性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值