Java垃圾回收

在Java中,垃圾指的是无引用的对象。

垃圾回收(Garbage Collection)是自动回收运行时未使用内存的过程。换句话说,它是一种销毁未使用对象的方式。

在C语言中,我们使用free()函数,在C++中使用delete()函数来实现这一过程。但是,在Java中,这个过程是自动执行的。因此,Java提供了更好的内存管理。

垃圾回收的优点

  • 它使Java的内存更高效,因为垃圾收集器会从堆内存中移除无引用的对象。
  • 这个过程由垃圾收集器(JVM的一部分)自动完成,因此我们不需要额外的努力。

对象如何成为无引用对象?

有多种方式:

  • 将引用设置为null
  • 将引用赋给另一个对象
  • 通过匿名对象等方式

图

  1. 将引用设置为null:

    Employee e=new Employee();  
    e=null;  
  2. 将引用赋给另一个对象:

    Employee e1=new Employee();  
    Employee e2=new Employee();  
    e1=e2;//现在 e1 引用的第一个对象可用于垃圾收集
  3. 通过匿名对象:

    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还是垃圾回收都不是被保证的。

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想