请直接下载PDF:  飞加Java学习笔记_垃圾回收.pdf 
学习就要多问一些“为什么”和“怎么”,这样才有助于提高。这就是著名的5W2H理论!
一、JAVA垃圾回收机制概述
针对这种情况,JAVA语言建立了垃圾回收机制。JAVA是纯粹的面向对象的编程语言,其程序以类为单位,程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,JAVA的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能被再次利用,提高程序的运行效率。垃圾回收不仅可以提高系统的可靠性、使内存管理与类接口设计分离,还可以使开发者减少了跟踪内存管理错误的时间,从而把程序员从手工回收内存空间的繁重工作中解脱出来。
JAVA垃圾回收机制另一个特点是,进行垃圾回收的线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。
下面本文从“对象的失去引用”和“对象离开作用域”这两个方面进行分析,探讨JAVA程序中的对象什么时候可以被当作垃圾来进行回收。二、对象的失去引用
通过下面的一段JAVA程序(例1),我们可以讨论程序中的对象是否已经符合垃圾回收的条件。请注意,我们只是讨论某个对象是否符合被回收的条件,这并不意味着该对象将被立即回收,关于这一点,本文后面还将进一步说明。
    例1:
1.       class Computer{ }
2.       public class GarbageCollector {
3.         Computer makeComputer() {
4.           Computer tempComputer = new Computer ();
5.           return tempComputer;
6.         }
7.         public static void main (String args[]) {
8.           GarbageCollector t = new GarbageCollector ();
9.           Computer newComputer= t.makeComputer();
10.        System.out.println(“tempComputer所指向的对象可以被当作垃圾回收”);
11.        Computer computer1=new Computer();
12.        Computer computer2=new Computer();
13.        computer2= computer1;
14.        Computer computer3=new Computer();
15.        computer3=null;
16.        System.out.println(“computer3所指向的对象可以被当作垃圾回收”);
17.        computer1=null;
18.        System.out.println(“computer1所指向的对象不能被当作垃圾回收”);
19.      }
20.    }
在继续讨论之前,我们首先回顾JAVA的两个基本概念——引用和对象。引用类似于其它程序设计语言中的指针。引用就象一个商标标签或者指示牌,它上面写着物品的名称,比如“电脑”,可是它并不是电脑。当把这个标签贴到电脑上后,标签与电脑就联系起来,它就代表电脑了。因此Computer computer1=new Computer();可理解为先创建一个对象的标签computer1,然后把标签贴到新创建的对象Computer上。当创建的对象内没有任何标签指向它时,就可被当作垃圾进行回收。
基于例1中的第11行~第20行,我们分析一个JAVA对象什么时候处于“失去引用”状态从而满足被回收的条件。(请直接下载PDF请直接下载PDF:  飞加Java学习笔记_垃圾回收.pdf