Java中的对象与垃圾回收

本文深入解析Java垃圾回收机制的特征,包括回收过程、对象的三种内存状态及finalize()方法的作用。同时,详细介绍了Java中四种对象引用类型:强引用、软引用、弱引用和虚引用的区别与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、垃圾回收机制特征

  • 垃圾回收机制只负责回收堆内存中的对象,不糊回收任何物理资源
  • 程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候进行。
  • 在垃圾回收任何对象之前,总是会先执行它的finalize()方法,该方法可能使对象被重新引用

二、对象在内存中的状态
(1)可达状态:当对象被一个及以上的引用变量所引用时,它的状态就是可达状态
(2)可恢复状态:当对象没有任何引用变量引用,且其finalize()方法尚未被执行时的状态
(3)不可达状态:当对象没有任何引用变量引用,且finalize()方法执行后其仍未被引用,则它就是不可达状态,系统会真正回收其所占用的资源

三、finalize()方法
(1)永远不要主动调用某个对象的finalize()方法,该方法留给垃圾回收机制调用
(2)finalize()方法何时被调用具有不确定性,不一定会被执行
(3)当JVM执行可恢复对象的finalize()方法时,可能使其重新变成可达状态
(4)当finalize()方法执行出现异常时,系统不会报告异常,程序继续执行,这是由于其方法原型为
          protected void finalize() throws Throwable
     也就是在声明时已经将任何可能的异常抛给了系统。
四、Java中对对象的引用的四种方式
(1)强引用:最常见的引用方式,即将一个对象赋给一个引用变量
(2)软引用:软引用需要通过SoftReference类实现,当一个对象只有软引用时,它有可能 被垃圾回收机制回收,当系统存储空间足够时,它不会被回收。通常用于内存敏感的程序中
(3)弱引用:弱引用通过WeakReference类实现。当一个对象只有弱引用时,无论系统内存是否足够,当垃圾回收机制运行时,它都会被回收。
(4)虚引用:虚引用通过PhantomReference类实现,虚引用类似于没有引用。它主要用于跟踪对象被垃圾回收的状态,不能单独使用,必须和引用队列(ReferenceQueue)一起使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值