Java教程-Java垃圾回收

Java垃圾回收
在Java中,垃圾指的是无引用的对象。
垃圾回收(Garbage Collection)是自动回收运行时未使用内存的过程。换句话说,它是一种销毁未使用对象的方式。
在C语言中,我们使用free()函数,在C++中使用delete()函数来实现这一过程。但是,在Java中,这个过程是自动执行的。因此,Java提供了更好的内存管理。
垃圾回收的优点
- 它使Java的内存更高效,因为垃圾收集器会从堆内存中移除无引用的对象。
- 这个过程由垃圾收集器(JVM的一部分)自动完成,因此我们不需要额外的努力。
对象如何成为无引用对象?
有多种方式:
- 将引用设置为null
- 将引用赋给另一个对象
- 通过匿名对象等方式
将引用设置为null:
Employee e=new Employee(); e=null;
将引用赋给另一个对象:
Employee e1=new Employee(); Employee e2=new Employee(); e1=e2;//现在 e1 引用的第一个对象可用于垃圾收集
通过匿名对象:
new Employee();
finalize()方法
finalize()方法在对象被垃圾收集之前每次被调用。可以使用该方法执行清理处理。该方法在Object类中定义如下:
protected void finalize(){}
注意:JVM的垃圾收集器只会收集通过new关键字创建的对象。因此,如果您创建了没有使用new关键字的对象,可以使用finalize方法执行清理处理(销毁剩余对象)。
gc()方法
gc()方法用于调用垃圾收集器执行清理处理。gc()方法可以在System和Runtime类中找到。
public static void gc(){}
注意:垃圾收集是由一个名为Garbage Collector(GC)的守护线程执行的。此线程在对象被垃圾收集之前调用finalize()方法。
Java中垃圾收集的简单示例
public class TestGarbage1{
public void finalize(){System.out.println("object is garbage collected");}
public static void main(String args[]){
TestGarbage1 s1=new TestGarbage1();
TestGarbage1 s2=new TestGarbage1();
s1=null;
s2=null;
System.gc();
}
}
object is garbage collected
object is garbage collected
注意:无论是finalization还是垃圾回收都不是被保证的。