Java对象与垃圾回收

一、介绍
当程序创建对象、数组等引用类型实体时,系统会在堆内存中位置分配一块内存区,对象就保存在其中,当这块内存不再被任何变量引用时,就成为了垃圾,等待垃圾回收机制回收。
垃圾回收机制的特点:
1、只回收堆内存的资源,不回收物力资源(如数据库连接,网络IO等)
2、回收任何对象之前,先调用他的finalize()方法,该方法可能使对象重新复活(让一个引用变量重新引用该对象),从而导致垃圾回收机制取消回收。

二、对象在内存中的状态


当某个对象被其他类的类变量引用时,只有该类被销毁后,该对象才进入可恢复状态。被其他对象的实例变量引用时,只有该对象被销毁后,该对象才进入可恢复状态。

三、强制垃圾回收
通知系统进行垃圾回收,但系统是否进行回收并不确定。有如下两种方式:
1、调用System的gc()静态方法:System.gc()
2、调用Runtime对象的gc()实例方法:Runtime.getRutime().gc()
public class GcTest {

	public static void main(String[] args) {
		for(int i=0;i<4;i++){
			new GcTest();
			Runtime.getRuntime().gc();
		}
	}

	@Override
	protected void finalize() throws Throwable {
		// TODO 自动生成的方法存根
		super.finalize();
		System.out.println("进行垃圾回收");
	}
}
四、finalize()方法
1、永远不要主动调用某个对象的finalize()方法,该方法应该主动交给垃圾回收机制调用
2、finalize()方法合适,是否被调用具有不确定性,不要纪委finalize()方法时一种一定会执行的方法
3、JVM执行可恢复对象的finalize()方法时,可能使该对象或系统中其他对象重新变为可达状态
4、JVM执行finalize()方法出现异常时,不会报告异常,继续执行

五、对象的软、弱、虚引用
1、强引用
最常见,创建一个对象,赋给一个引用变量,通过该引用变量操作实际对象。当对象被一个或多个引用变量引用时,处于可达状态,不会被回收。
2、软引用
通过SoftReference类实现, 当内存充足时,不会被回收,内存不足时可能会回收,通常用户与内存敏感的程序中。
3、弱引用
通过WeakReference类实现, 和软引用很象,但级别更低,对于只有弱引用的对象,不管内存够不够,当系统垃圾回收机制运行时,总会回收该对象的内存。
4、虚引用
通过PhantomReference类实现, 类似于完全没有引用,主要用于跟踪对象被垃圾回收的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值