finalize()


finalize()不能当作c++语言中的析构函数来使用,所以要明确:

在c++中,对象一定会被销毁(如果程序中没有错误的话);而 JAVA中的对象并非总是被垃圾回收的。或者说:

1) 对象可能不被垃圾回收。

2)垃圾回收不等于“析构”。

finalize()的用途:

finalize()不是通用的清理方法。

牢记一点:垃圾回收只与内存有关!

垃圾回收器的唯一原因是为了回收程序不再使用的内存。所以对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),他们也必须与内存记起回收有关!

finalize()是为了处理通过某种创建对象方式一位的方式为对象分配了存储空间。

Java中一切皆为对象,这又是怎么回事呢?这是因为在分配内存的时候可能使用“本地方法”,即调用非JAVA代码的方式。本地方法只支持c和c++,他们可以调用任何其他语言,所以相当于调用任何代码。比如c中的malloc()函数系列,除非调用了free()函数,否则存储空间得不到释放,从而造成内存泄露。当然,free()函数是c和c++中的,所以需要在finalize()中用本地方法调用它!

所以不要过多的使用finalize()方法。

 

java不允许创建局部变量!必须使用new来创建对象。Java中也需用delete来释放对象,因为垃圾回收器的存在!垃圾回收是在java虚拟机(JVM)面临内存耗尽的情况,进行的!

System.gc()用于强制进行终结动作(在写程序的时候这么做可以加速调试过程)!

finalize()因为在垃圾回收的时候被调用,所以可以用来验证终结条件,查看类中的值!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值