请直接下载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
学习就要多问一些“为什么”和“怎么”,这样才有助于提高。这就是著名的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
好吧,download下来看看先