Java中回收资源的方法

本文探讨了Java中如何回收对象占用的内存资源,包括垃圾自动回收机制和非内存资源的回收。Java通过垃圾回收机制自动管理堆内存,而对象占用的非内存资源如数据库连接则需要通过finalize和finally机制进行手动释放。尽管finalize存在不确定性,但finally块能确保资源在异常情况下也能得到清理,类似于C++的析构函数。
摘要由CSDN通过智能技术生成

1.回收对象占用的内存

对于内存的回收,JAVA与C++不同。在C++中,对象占用的内存,其回收是明确无误的。在栈中分配的对象,当代码的运行离开对象的作用域时,系统自动调用对象的析构函数,然后回收内存。对于在堆中为对象分配的内存,即使离开分配时的作用域,系统也不回收内存,只有开发者调用如delete这样的操作符时,系统才会调用对象的析构函数,然后回收内存。如果发开者忘记调用delete回收堆中分配的对象占用的内存,就内存泄露了。

而在JAVA中,所有对象都是在堆中分配的,并且对象没有析构函数。开发者无需关心对象占用的内存回收问题。Java实现了垃圾自动回收机制。如下面这样:

1    public static void main(String[] args) {
2        Test t = new Test();
3        t = new Test();
4        t = null;
5    }

在第二行为t创建了对象,此时新创建的对象是可达的,因为有"t"这个句柄指向它,所以这个对象不会被当成垃圾回收。
在第三行为t重新创建了对象,此时在第二行为t创建的对象就没有句柄指向它,它变成不可达的状态,这个时候第二行分配的对象就可以当成垃圾回收了。
在第四行将t放空。同理,第三行分配的对象也变成不可达,这个时候第三行创建的对象也可以回收了。

这种机制使程序员不用再关心内存的回收问题,只管创建不管回收,回收由系统负责,当然也就避免了因为程序员粗心而造成的内存泄漏。当然代价就是效率,内存的回收由系统控制,什么时候回收是不确定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值