垃圾回收是一种自动的存储管理机制。 当一些被占用的内存不再需要时,就应该予以释放,以让出空间,这种存储资源管理,称为垃圾回收(Garbage Collection)。
垃圾回收器可以让程序员减轻许多负担,也减少程序员犯错的机会。
1. gc只会在堆中进行对象回收,且在堆中对象没有引用子项的时候
(finaliza )方法会在对象被销毁之前最后确认
注:当对象没有引用指向时,虚拟机会按照一定的垃圾回收机制算法来调用finalize方法将该对象回收,并不是只要没有引用对象就会被回收。
因此,可以调用System.gc()方法来主动调用垃圾回收机制,但也并不能保证一定能成功。
在调用时,程序并不会阻塞在此处,而是会继续向下执行。
默认的object类中的finalize方法是不作其余处理的。
可以重写finalize方法来实现自己想要的资源释放操作,比如数据库连接等。
2..在堆中对象过多时,gc首先会移除弱引用和虚引用
注:弱引用是一种比软引用较弱的引用类型。在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。但是,由于垃圾回收器的线程通常优先级很低,因此,并一不定能很快的发现持有弱引用的对象。这种情况下,弱引用对象可以存在较长的一段时间。
虚引用是所有引用类型中最弱的一个。一个持有虚引用的对象,和没有引用几乎是一样的,随时都可能被垃圾回收器回收。当试图通过虚引用的get()方法取得强引用时,总是会失败。并且,虚引用必须和引用队列一起使用,它的作用在于跟踪垃圾回收过程。
3.在gc中对内存进行分区