java垃圾回收,主要是靠一个低优先级的进程负责回收,注意,不是后台的进程他的优点是边回收,边调整堆使其紧凑。为了提高系统效率,垃圾回收器通常只在满足两个条件时才运行:即有对象要回收且系统需要回收。切记垃圾回收要占用时间,因此,Java运行时系统只在需要的时候才使用它。因此你无法知道垃圾回收发生的精确时间。
理解垃圾回收的前提是理解Java运行时的内存堆栈模型,目的是为了对Java内存管理有个认识,在编程时更有效的使用内存。但不要为了垃圾回收,手动编写大量代码,我们可以用简单的编程来影响它的实现。
a.将无用对象赋值为null。
b.重新为引用变量赋值。比如:Person p = new Person("aaa");p = new Person("bbb");这样,new Person("aaa")这个对象就是垃圾了----符合垃圾回收条件了。
c.让相互联系的对象称为“岛”对象Person p1 = new Person("aaa");Person p2 = new Person("bbb");Person p3 = new Person("ccc");p1=p2; p2=p3; p3=p1;p1=null; p2=null; p3=null;在没有对p1、p2、p3置null之前,它们之间是一种三角恋关系。分别置null,三角恋关系依然存在,但是三个变量不在使用它们了。三个Person对象就组成了一个孤岛,最后死在堆上----被垃圾回收掉。
d.强制的垃圾回收System.gc()实际上这里的强制,是程序员的意愿、建议,什么时候执行是JVM的垃圾回收器说了算。调用垃圾回收也不一定能保证未使用的对象一定能从内存中删除。唯一能保证的是,当你内存在极少的情况,垃圾回收器在程序抛出OutofMemaryException之前运行一次。
e.finalize方法透视垃圾收集器的运行。在JVM垃圾收集器收集一个对象之前,一般要求程序调用适当的方法释放资源,但在没有明确释放资源的情况下,Java提供了缺省机制来终止化该对象心释放资源,这个方法就是finalize()。
原型为:
注意: