Java基础之垃圾回收
1 /** 2 * 对象在没有任何引用可以到达时,生命周期结束,成为垃圾。 3 * 所有对象在被回收之前都会自动调用finalize()方法。 4 * ************************************************** 5 * 一个对象在成为垃圾之后不会被马上回收, 6 * JVM会检测内存中的垃圾堆积到一定程度时才会回收, 7 * 如果我们不想等到这个时候才回收, 8 * 可以使用System.gc()方法来通知虚拟机回收垃圾。 9 * 调用该方法之后JVM会开启新线程做处理垃圾的工作,这需要一定时间。 10 */ 11 public class GcDemo { 12 13 public static void main(String[] args) throws Exception { 14 15 for(int i = 0; i < 1000; i ++){ 16 new Person(); //创建一个对象之后,没有使用成为垃圾 17 } 18 System.out.println("回收之前: " + Person.count); 19 System.gc(); //通知虚拟机进行垃圾回收 20 /* 21 * 调用System.gc()之后JVM会开启新线程做处理垃圾的工作,需要一定的时间,让其休眠几秒之后,再查看垃圾回收的效果 22 * 垃圾多回收需要的时间也会长 23 */ 24 Thread.sleep(1000); 25 System.out.println("回收之后: " + Person.count); 26 } 27 28 } 29 30 class Person{ 31 //定义一个count来计数,查看回收之前和回收之后 32 public static int count; 33 34 public Person(){ 35 count ++; //每创建一个对象count加加 36 } 37 //所有对象在被回收之前都会自动调用finalize()方法 38 public void finalize(){ 39 count --; //回收一个垃圾减掉一个 40 } 41 }